You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prolog实现两个列表合并去重的代码问题求解

问题排查
  • 列表嵌套问题:原代码构造结果列表时使用了L3 = [Cab,Cola2]语法,逗号分隔表示将Cab和整个Cola2列表作为两个独立元素放入L3,最终就会形成多层嵌套结构。正确的列表拼接应该用|运算符,写法为L3 = [Cab|Cola2],表示将Cab作为头部,Cola2作为尾部拼接成新列表。
  • 无去重、无排序逻辑:原代码仅实现了交替拼接两个列表的粗糙逻辑,没有对两个列表的头部元素做大小比较,也没有对相同元素做去重判断,自然无法输出有序去重的结果,同时终止条件仅覆盖了L1为空的场景,缺少L2为空的判断分支。
正确实现方案

默认两个输入列表均为升序排列,采用有序归并的思路实现,过程中同步完成去重:

% 两个列表都不为空,L1头部更小,取L1头部递归
mezclar([H1|T1], [H2|T2], [H1|Res]) :-
    H1 < H2,
    mezclar(T1, [H2|T2], Res).

% 两个列表都不为空,L2头部更小,取L2头部递归
mezclar([H1|T1], [H2|T2], [H2|Res]) :-
    H1 > H2,
    mezclar([H1|T1], T2, Res).

% 两个列表头部相等,去重,只保留一个,两个列表都跳过头节点递归
mezclar([H|T1], [H|T2], [H|Res]) :-
    mezclar(T1, T2, Res).

% L1为空,结果直接取L2
mezclar([], L2, L2).

% L2为空,结果直接取L1
mezclar(L1, [], L1).
效果验证

执行查询mezclar( [1,3,5], [2,3,9], X ).,返回结果为X = [1, 2, 3, 5, 9],符合预期。
执行查询mezclar( [1,3,5], [2,5,9], X ).,返回结果为X = [1, 2, 3, 5, 9],无嵌套无重复。

内容的提问来源于stack exchange,提问作者Juan Federico Di Leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 01:12:03