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

Prolog中如何实现数组连续相等元素的合并

Prolog实现连续相等元素合并去重

需求说明

需要实现列表转换逻辑,规则为:删除列表中连续重复的元素,仅保留每段连续相等元素块的第一个元素:

  • 输入示例:[1,1,1,a,b,b,3,3,3,3]
  • 输出示例:[1,a,b,3]

可行实现代码

以下纯递归实现兼容SWI-Prolog、GNU Prolog等标准Prolog环境,无需依赖额外库:

% 边界条件:空列表压缩结果为空
compress([], []).
% 边界条件:单元素列表压缩结果为自身
compress([X], [X]).
% 递归规则1:列表前两个元素相等时,跳过第一个重复元素,继续压缩后续列表
compress([X,X|Rest], Result) :- 
    compress([X|Rest], Result).
% 递归规则2:列表前两个元素不等时,保留第一个元素,压缩剩余子列表后拼接
compress([X,Y|Rest], [X|ResultTail]) :- 
    X \= Y,
    compress([Y|Rest], ResultTail).

调用验证

在Prolog解释器中执行如下查询即可验证效果:

?- compress([1,1,1,a,b,b,3,3,3,3], Res).

执行后将返回正确结果:
Res = [1, a, b, 3]

补充说明:如果需要支持包含未绑定变量的列表压缩,可以将判断不等的X \= Y替换为dif(X, Y),避免变量实例化错误。

内容的提问来源于stack exchange,提问作者Ahmed M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:39:25