我想定义一个谓词 p(X),其中 X 是列表列表。p(X) 为真,如果 X 中只有一个元素 Y,则 X 和 Y 没有共同的元素。
这不是家庭作业。这是我考试的一个示例问题。谢谢你。
写下来:
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 列表是异构的。一个元素也可能是一个列表。还有它的元素。