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

如何修改Prolog代码实现回文数判定并输出符合条件的数值

没问题,我帮你调整这段Prolog代码,让它能输出你要的回文数(1、11、22…101这类)。先理清楚原代码的逻辑:你已经用rev/2实现了数字反转,现在就差在反转后对比X和C1,相等就打印的步骤了。

先看修改后的完整代码:

go(N):- 
    % 如果不需要输出0,直接注释掉下面这两行就行
    write(0), nl, 
    go(0, N).

go(_, 0):- !.

go(A, C):- 
    C1 is A + 1, 
    rev(C1, X), 
    % 核心判断:当反转后的X和原数C1相等时,打印该数
    (X =:= C1 -> write(C1), nl ; true),
    NewC is C - 1, 
    go(C1, NewC).

rev(Q, E):- 
    name(Q, Q1), 
    reverse(Q1, E1), 
    name(E, E1).

我做了这几个关键修改:

  • 添加数值相等判断:用(X =:= C1 -> write(C1), nl ; true)这个条件分支——Prolog里比较数值相等要用=:=(=是变量绑定,不是数值比较哦),当条件成立时打印回文数,否则执行true跳过(避免递归失败)。
  • 去掉冗余代码:原代码里的A1 is A完全没必要,直接用C1 is A + 1就可以得到下一个要检查的数。
  • 可选控制是否输出0:原代码开头会打印0(0也是回文数),如果你的需求里不需要它,直接注释掉go(N)里的write(0), nl就行。

测试一下:比如调用go(101).,就会输出0、1、2…9、11、22…99、101这些回文数;要是去掉0的输出,就会从1开始打印你要的那些数啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:44:17