首页 > 解决方案 > 序言。我不能混合两个列表

问题描述

我想将两个列表合二为一。例如,[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|...]]]]]

标签: listprolog

解决方案


要将两个列表合二为一,结果列表已排序且没有重复,请尝试:

mezclar(L1,L2,L3) :- append(L1,L2,L4), sort(L4,L3).

查询:

mezclar([1,3,5], [2,5,9], X).

将产生结果:

X = [1, 2, 3, 5, 9]

此示例使用sort/2. 以下是 SWI 文档的链接sort/2

http://eu.swi-prolog.org/pldoc/man?predicate=sort/2


推荐阅读