【发布时间】:2014-11-10 06:29:39
【问题描述】:
我想用 Prolog 解决以下问题,以提高/测试我的 Prolog 知识。
求三个数字 X、Y 和 Z,使得 base10 中的 XYZ 等于 base9 中的 ZYX
由于我已经用其他一些语言解决了它,我知道解决方案是:
- (X, Y, Z) = (0, 0, 0)
- (X, Y, Z) = (4, 4, 5)
我通过生成 X、Y、Z 的所有组合(10^3 = 1000 个组合)并测试条件是否为真,用其他语言解决了这个问题。
用 Prolog 测试
使用 Prolog,我编写了以下测试程序:
is_solution(X, Y, Z) :- 9>=X, X>=0, 9>=Y, Y>=0, 9>=Z, Z>=0,
base10 is (100*X + 10*Y + Z), base9 is (9*9*Z+9*Y+X),
base10 = base9.
但是好像有什么不对:
?- is_solution(0,0,0).
false.
?- is_solution(4,4,5).
false.
生成所有解决方案
我以为我可以通过swipl -f main.prolog 获得解决方案:
is_solution(X,Y,Z).
ERROR: >=/2: Arguments are not sufficiently instantiated
我该如何解决这个问题
无需用户交互即可打印所有内容
最后,我想要一个可执行脚本,它可以打印所有解决方案而无需用户交互。我见过findall,我想我必须在这里使用它,但到目前为止我从未(成功地)使用过它。你能告诉我如何打印这个问题的所有解决方案吗?
【问题讨论】:
标签: prolog