Prolog:比较两个列表并找出第一个列表中的至少一个成员是否存在于另一个列表中

Mar*_*man 2 prolog

为了更多地了解序言(并且为了解决我的作业),我遇到了一种情况,我需要比较两个列表并找出是否至少有一个元素匹配......
这是我的一个例子想做:

?-match([a,b,c],[x,y,z]).
no.

?-match([a,b,c],[x,y,b]).
yes.
Run Code Online (Sandbox Code Playgroud)

到目前为止我的解决方案:

compare_list([],[]).
compare_list([],_).
compare_list([L1Head|L1Tail],List2):-
    member(L1Head,List2),
    compare_list(L1Tail,List2).
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案给出了true当 List1 的所有成员都出现在 List2 中时!

请大家不要认为我在作业中作弊,问题要复杂得多,我只是陷入了这一点,需要帮助才能摆脱这个困境......否则我已经完成了整个作业我!

Cap*_*liC 5

您的问题可以使用更简单的内置函数来解决

match(L1,L2) :- member(E,L1),member(E,L2). % full join
Run Code Online (Sandbox Code Playgroud)

如果您真的只对“至少一个”解决方案感兴趣,请添加讨厌的削减

match(L1,L2) :- member(E,L1),memberchk(E,L2),!. % really, just the first!
Run Code Online (Sandbox Code Playgroud)