【发布时间】:2021-07-13 03:05:21
【问题描述】:
我想将两个列表合二为一。例如,[1,3,5] 和 [2,3,9] 将产生 [1,2,3,5,9]。
我试过了:
mezclar( L1, L2, L3 ):-
L1 = [Cab|Cola] ,
L3 = [Cab,Cola2] ,
mezclar(L2,Cola,Cola2) .
mezclar( L1, L2, L3 ):-
L1=[] ,
L3=L2 .
但我有两个问题。
- 第一个问题是重复数字
- 第二个是我正在将列表放入列表中,我不想这样做。
如果我执行
mezclar( [1,3,5], [2,5,9], X ).
我明白了
X = [1, [2, [3, [5, [5|...]]]]]
【问题讨论】:
-
mezclar(L1,L2,L3):-L1=[],L3=L2。梅斯克拉(L1,L2,L3):-L1=[Cab|Cola],梅斯克拉(L2,可乐,Cola1),L3=[Cab|Cola1]。现在我得到了排序的列表,但我遇到了与重复数字相同的问题
-
在将每个元素添加到新列表之前,检查它是否已经存在。您可以使用 append/3 插入元素,并使用 member/2 检查它们是否已经在列表中
-
如果您使用的是 SWI-Prolog,请参阅 ord_union/2 or ord_union/3