列表清单的Prolog成员

时间:2012-08-27 11:56:31

标签: list prolog

我想定义一个谓词p(X),其中X是列表列表。 p(X)为真,如果在X中只有一个元素Y,则X和Y没有共同的元素。

这不是作业。这是我考试的一个示例问题。谢谢。

1 个答案:

答案 0 :(得分:1)

将其写下来

p(X):-    %//  "define a predicate p(X), where X is list of lists, such that 
          %//   p(X) is true if in X there is only one element Y, 

  % findall( Y, (member(Y,X), ........ ), [_])

          %//   such that X and Y have no common elements".

    findall( Y, (member(Y,X), \+ have_common_element(X,Y) ), [_]).

have_common_element(A,B):- member(X,A), memberchk(X,B).

现在,

8 ?- p([[1,[2]],[2],[3]]). %// both [2] and [3] have no common elts w/ X
false.

9 ?- p([[1,[2]],[2]]).     %// [1,[2]] has one common elt w/ X, viz. [2]
true.

Prolog列表是异构的。元素也可以是列表。它的元素也是。