2011-01-20 102 views
0

我是新来的Prolog,我试图检查第一个列表中的任何元素是否在第二个列表上有匹配。我认为这将递归工作,我知道我必须使用类似[X | Rest]的比较,然后通过再次调用该函数来使用该休息。语法确实让我困惑,因此我在寻求帮助。我希望我很清楚。2个列表上的匹配元素

编辑:哦,如果列表中没有匹配的元素,则返回false,如果找到一个匹配,则返回true(也可以终止)(至少,但是一个足够了,因此建议终止,我相信你使用!为此?)。

回答

0

这是一个建议。

我们在第一个列表上递归。第一个定义是针对基本情况(第一个列表为空)。第二个定义适用于第一个列表的第一个元素位于第二个元素的情况。第三种情况是针对剩下的情况,其中我们必须检查第一个清单的剩余部分。

 
common_elements([], L) :- 
    fail. 

common_elements([H|T], L) :- 
    memberchk(H, L), !. 

common_elements([H|T], L) :- 
    common_elements(T, L). 
+0

我会接受你的建议,谢谢:) – Qosmo 2011-01-21 00:14:03