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

Prolog intgr/1谓词优化:按指定顺序生成正负整数

解决Prolog intgr/1谓词的顺序与重复问题

原代码的问题在于递归逻辑是深度优先的无界搜索,每次递归调用intgr(Y)后同时生成Y+1和Y-1,这会导致回溯时重复生成已出现的数值(比如从1回溯到0后生成-1,再从-1回溯生成0),同时输出顺序会被递归分支打乱。

要实现0;1;-1;2;-2;…的有序输出,需要分层生成整数:先输出0,再依次生成绝对值为1、2、3…的正负整数,每个绝对值只对应一对正负值,避免重复。

修正后的代码

intgr(0).
intgr(X) :-
    intgr_pos_neg(1, X).

% 生成当前绝对值的正整数
intgr_pos_neg(N, N).
% 生成当前绝对值的负整数
intgr_pos_neg(N, -N).
% 递增绝对值,进入下一层
intgr_pos_neg(N, X) :-
    N1 is N + 1,
    intgr_pos_neg(N1, X).

代码说明

  1. 主谓词intgr/1首先匹配0,满足第一个输出项;
  2. 调用辅助谓词intgr_pos_neg/2,从绝对值1开始:
    • 先生成正整数N,回溯后生成负整数-N;
    • 再通过递归将N递增,进入下一层绝对值的生成,以此循环。

这样查询?- intgr(X)时,会严格按照0;1;-1;2;-2;3;-3;…的顺序输出,且不会出现重复值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:02:46