Prolog中的原始性检查器

时间:2018-11-27 11:53:13

标签: prolog

我是prolog的新手。 我编写了以下代码来测试数字是否为质数。

notPrime(X):-
    integer(Y),
    Y>1,
    mod(X,Y) is 0.

prime(X):- \+ notPrime(X).

我的想法是:“如果数字X不为质数,则存在整数Y> 1,使得X mod Y为0。”

虽然该代码无法正常工作,但我无法弄清楚为什么。 谢谢:)

1 个答案:

答案 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 codetask Primality by trial division