我是Prolog的新手,我正在尝试检查第一个列表中的任何元素是否在第二个列表中匹配。我认为这将递归地工作,我知道我必须使用类似[X | Rest]的东西进行比较,然后通过再次调用该函数来使用其余部分。语法确实困扰了我,因此我正在寻求帮助。我希望我很清楚。
编辑:哦,如果列表中没有匹配的元素,它应该返回false,如果找到一个匹配,则返回true(也可以终止)(至少,但是一个就足够了,因此建议终止,我相信你使用!为此?)。
答案 0 :(得分:0)
这是一个建议。
我们在第一个列表上递归。第一个定义是基本情况(第一个列表为空)。第二个定义是针对第一个列表的第一个元素位于第二个元素中的情况。第三种情况是针对剩下的情况,我们必须检查第一个清单的剩余部分。
common_elements([], L) :- fail. common_elements([H|T], L) :- memberchk(H, L), !. common_elements([H|T], L) :- common_elements(T, L).