List 在Prolog中将非重复元素添加到列表中
我有一个List 在Prolog中将非重复元素添加到列表中,list,prolog,List,Prolog,我有一个列表,我正试图从第一个列表中尚未出现的另一个列表中添加元素 如果我有两个列表: [a, b, 3, c] [2, a, b, 4] 产出将是: [a, b, 3, c, 2, 4] 我能够以相反的顺序得到它,但不是以正确的顺序,以下是我尝试做的: add_to_list(L, [], L). add_to_list(List, [H|T], [H|Res]) :- \+ member(H, List), add_to_list(List, T, Res). add_
列表
,我正试图从第一个列表
中尚未出现的另一个列表中添加元素
如果我有两个列表:
[a, b, 3, c]
[2, a, b, 4]
产出将是:
[a, b, 3, c, 2, 4]
我能够以相反的顺序得到它,但不是以正确的顺序,以下是我尝试做的:
add_to_list(L, [], L).
add_to_list(List, [H|T], [H|Res]) :-
\+ member(H, List),
add_to_list(List, T, Res).
add_to_list(List, [H|T], Res):-
add_to_list(List, T, Res).
当我使用上面提到的两个列表执行该方法时,我得到的输出是:
[2, 4, a, b, 3, c]
我知道我的结束子句将
L
添加到我得到的结果的末尾,这就是为什么顺序混乱的原因,但是我如何才能以正确的方式进行呢?这里的问题是,在连接数据之前,您应该先移动到第一个列表的末尾
我们仍然可以使用您编写的代码,但可以对其稍作修改,如:
atl(_, [], []).
atl(List, [H|T], R) :-
( member(H, List)
-> R = Res
; R = [H|Res]
),
atl(List, T, Res).
因此,现在我们可以根据atl/3
编写一个addToList/3
:我们首先生成要追加的项目列表,然后使用append/3
将这些项目追加到列表的末尾:
addToList(A, B, L) :-
atl(A, B, R),
append(A, R, L).
它的作品,但它使用了一些未知的符号为我,这看起来像lambda,所以我将不得不查找它如何使用它们,但感谢您的支持answer@kataroty:它是一个if-then-else:
addToList(A, B, L) :-
atl(A, B, R),
append(A, R, L).