Prolog-列表列表中的列表元素

Prolog-列表列表中的列表元素,prolog,Prolog,我有一份清单和一份清单: A = [1,2,4,5] L = [[1,2,5],[3,4,5]] 如果A包含与其中一个列表相同的元素,我希望它返回true。由于A包含与L中的第一个列表相同的元素(1,2,5)([1,2,5]),因此即使A中有一个元素不在L中的第一个列表中,它也应该返回true 为了解决这个问题,我尝试使用的答案中提供的两个谓词: p(X):- findall( Y, (member(Y,X), \+ have_common_element(X,Y) ), [_]). have

我有一份清单和一份清单:

A = [1,2,4,5]
L = [[1,2,5],[3,4,5]]
如果A包含与其中一个列表相同的元素,我希望它返回true。由于A包含与L中的第一个列表相同的元素(1,2,5)([1,2,5]),因此即使A中有一个元素不在L中的第一个列表中,它也应该返回true

为了解决这个问题,我尝试使用的答案中提供的两个谓词:

p(X):- findall( Y, (member(Y,X), \+ have_common_element(X,Y) ), [_]).
have_common_element(A,B):- member(X,A), memberchk(X,B).
但是,以下查询将返回false:

p([[[1,2,5],[3,4,5]],[1,2,4,5]]).
我理解这是因为A(4)中有一个元素不在L的第一个列表中,尽管我很难理解如何扩展谓词以使查询返回true


是否有可能扩展这些谓词,以便即使包含其他(非相互)元素,也能返回true?

您想说的似乎是:

p(A, Ess) :-
   member(Es, Ess), % there is a list Es in Ess
   maplist(A+\E^member(E,A), Es). % for all E in Es: member(E,A).
或不带lambdas:

p(A, Ess) :-
   member(Es, Ess),
   maplist(list_member(A), Es).

list_member(L, E) :-
   member(E, L).

我的错误,都解决了!很抱歉响应太晚,但是我尝试使用非lambda版本p([8,9],[1,2,3],[3,4,5])来查看它是否返回false,但是由于一些奇怪的原因,它返回true。你知道为什么吗?@Alpine:你得到了一个警告:有一个
代替了