为了更多地了解序言(并且为了解决我的作业),我遇到了一种情况,我需要比较两个列表并找出是否至少有一个元素匹配......
这是我的一个例子想做:
?-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 中时!
请大家不要认为我在作业中作弊,问题要复杂得多,我只是陷入了这一点,需要帮助才能摆脱这个困境......否则我已经完成了整个作业我!
您的问题可以使用更简单的内置函数来解决
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)