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
相关产品推荐
相关产品推荐

