Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在Prolog中将非重复元素添加到列表中_List_Prolog - Fatal编程技术网

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).