Prolog求解TWO+TWO=FOUR密码算术题编译报错求助
Prolog求解TWO+TWO=FOUR报错修复方案
报错原因排查
- 语法问题(直接触发编译报错):谓词名
solution和参数列表的左括号之间存在多余空格,Prolog语法不允许谓词名与参数括号间有空格,编译器会将solution识别为独立表达式,后续括号内容无法匹配语法规则,因此抛出. or operator expected after expression错误。 - 逻辑问题(语法修复后会出现无效解):缺少数字首位不为0的约束,两位数TWO的首位T、四位数FOUR的首位F不能为0,否则会生成不符合常规数字书写规则的结果。
修正后可运行代码
solution(T, W, O, F, U, R) :- select(T, [0,1,2,3,4,5,6,7,8,9], L1), T \= 0, select(W, L1, L2), select(O, L2, L3), select(F, L3, L4), F \= 0, select(U, L4, L5), member(R, L5), FOUR is F * 1000 + O * 100 + U * 10 + R, TWO is T * 100 + W * 10 + O, FOUR is TWO + TWO.
运行验证
在Prolog交互环境中执行查询:?- solution(T,W,O,F,U,R).
可得到唯一有效解:
T = 7, W = 3, O = 4, F = 1, U = 6, R = 8
验证计算:734 + 734 = 1468,完全匹配题目要求。
内容的提问来源于stack exchange,提问作者addy
相关产品推荐
相关产品推荐

