我是prolog的新手。 我编写了以下代码来测试数字是否为质数。
notPrime(X):-
integer(Y),
Y>1,
mod(X,Y) is 0.
prime(X):- \+ notPrime(X).
我的想法是:“如果数字X不为质数,则存在整数Y> 1,使得X mod Y为0。”
虽然该代码无法正常工作,但我无法弄清楚为什么。 谢谢:)
答案 0 :(得分:0)
代码无法正常工作,我也不知道为什么。
在您的第一个子句中
notPrime(X):-
integer(Y),
Y>1,
mod(X,Y) is 0.
声明
integer(Y)
使用变量Y
,但是Y
未绑定到值以及何时绑定
integer(Y)
检查Y是否为整数,则失败。参见integer/1
integer/1
不会生成整数,它会测试值是否为整数。
有关使用Prolog生成素数的工作示例,请参见Rosetta code的task Primality by trial division