You need to enable JavaScript to run this app. 如何使用Prolog按元素奇偶性生成对应0-1列表
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Prolog按元素奇偶性生成对应0-1列表

Prolog 奇偶转换列表代码修复方案

原代码存在的问题

  • 缺少递归终止条件:未定义空输入列表对应的输出规则,递归无法正常退出
  • 语法错误:第二个determine子句中,determine(Xs,K)前遗漏逗号,两个逻辑语句被错误拆分
  • 逻辑设计错误:
    • 误用append拼接单个数字:append要求操作对象为列表,直接传入0/1会触发类型匹配错误
    • 采用反向累积输出的设计,递归方向和列表遍历方向相反,极易出现参数传递错误

正确实现代码

even(X) :- 0 is mod(X, 2).
odd(X) :- 1 is mod(X, 2).

% 递归终止边界:空列表输入对应空列表输出
determine([], []).

% 偶数分支:当前输入元素为偶数时,输出当前位为0,递归处理剩余元素
determine([X|Xs], [0|Ys]) :-
    even(X),
    determine(Xs, Ys).

% 奇数分支:当前输入元素为奇数时,输出当前位为1,递归处理剩余元素
determine([X|Xs], [1|Ys]) :-
    odd(X),
    determine(Xs, Ys).

运行效果

执行测试用例:
determine([1,2,3,4,5], K).
直接返回结果:K = [1, 0, 1, 0, 1],完全匹配预期需求。

补充说明:该实现采用Prolog标准的正向列表递归写法,无需调用append,整体时间复杂度为线性O(n),远优于原设计的反向累积+append拼接的平方级复杂度方案。


内容的提问来源于stack exchange,提问作者陈仕隆

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 15:24:03