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

Prolog编写替换列表从第二位起每隔一位元素的谓词问题

Prolog谓词substitute实现修复

问题根因

你编写的原有代码存在两个逻辑漏洞:

  • 仅覆盖了空列表、剩余待处理元素≥2个两类场景,缺失了剩余待处理元素仅1个的边界分支
  • 递归逻辑默认每次输出2个新元素,当原列表长度为奇数时,会强制补出多余元素,不符合仅替换、不新增的需求

修复后代码

% 空列表输入直接返回空
substitute([], _, []).
% 仅剩余1个元素时直接保留,无需替换
substitute([SingleElem], _, [SingleElem]).
% 存在至少2个元素时:保留第1位,替换第2位为指定元素,剩余部分递归处理
substitute([First, Second | Rest], Target, [First, Target | NewRest]) :-
    substitute(Rest, Target, NewRest).

效果验证

运行官方示例测试:

  • 执行查询 substitute([a, b, c], 1, L2).,返回结果 L2 = [a, 1, c],符合预期
  • 执行查询 substitute([a, b, c, d], a, L2).,返回结果 L2 = [a, a, c, a],符合预期

内容的提问来源于stack exchange,提问作者bami77

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:48:02