我是 prolog 的新手。我想编写 compare_lists/2 来比较 2 个列表,如果它们至少有一个共同元素,则返回 true。我知道这可以用类似的东西来完成
common_list([H|_],T) :- member(H,T).
common_list([_|T],L) :- common_list(T,L).
common_list2(L1,L2) :- member(X,L1),member(X,L2).
但我想在没有 Prolog 内置谓词的情况下做到这一点。我试着写这个
common_elements([H|_],[H|_]).
common_elements(L,[_|T]) :- common_elements(L,T).
common_elements([_|T],L):-common_elements(T,L).
但是当我问在线嗖嗖序言工具时common_elements([3,13,8,1],[5,3,7,3,1]).
,它回答了真正的 37 次,而不是像 common_list/2 和 common_list2/2 那样的 3 (我必须使用 cut 来获得 1 而不是 3,但这是另一回事)。