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

Prolog列表递归筛选平方小于100的元素时报预期运算符语法错误

Prolog代码问题排查与修复

语法错误原因

你收到“预期运算符”报错的直接原因是第二个子句中number(X)后缺失了分隔谓词的逗号,Prolog解析时无法识别后续的逻辑关系,触发语法异常。

其他逻辑错误

修正语法问题后,你仍然无法得到预期结果,还存在以下逻辑问题:

  • 缺少平方值小于100的判断条件,不符合需求的筛选逻辑
  • 递归调用参数错误,findSqr(X,SX)既不符合列表递归的遍历逻辑,也和你定义的谓词参数结构不匹配
  • 输出结构和预期不匹配,现有代码未同时返回符合条件的元素及其平方值

修复后代码

% 可按需调换两个参数位置匹配你的查询写法
findSqr([], []).
% 元素为数字且平方小于100,保留<元素, 平方>对
findSqr([X|Y], [(X, SX)|SY]) :-
    number(X),
    SX is X * X,
    SX < 100,
    findSqr(Y, SY).
% 元素为数字但平方≥100,跳过该元素
findSqr([X|Y], SY) :-
    number(X),
    SX is X * X,
    SX >= 100,
    findSqr(Y, SY).
% 元素不是数字,跳过该元素
findSqr([X|Y], SY) :-
    \+ number(X),
    findSqr(Y, SY).

运行效果

将代码参数调换为和你的查询匹配(第一个参数为输出结果,第二个为输入列表)后,执行你给出的查询:

findSqr(Res, [23,9,67,12,222,19,6]), member((X,Y), Res).

即可得到预期输出:

X = 9, Y = 81 ;
X = 6, Y = 36 ;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 02:15:03