我根据素数只能被1和其本身整除的逻辑编写了以下程序。因此,我只是经历了将其除以所有大于一个且小于其自身的数字的过程,但是由于将所有输入的数字都视为真实值,所以我似乎遇到了问题。这是我的代码...
divisible(X,Y) :-
Y < X,
X mod Y is 0,
Y1 is Y+1,
divisible(X,Y1).
isprime(X) :-
integer(X),
X > 1,
\+ divisible(X,2).
提前致谢 :)
最佳答案
我是Prolog的初学者,但设法解决了您的问题。
divisible(X,Y) :- 0 is X mod Y, !.
divisible(X,Y) :- X > Y+1, divisible(X, Y+1).
isPrime(2) :- true,!.
isPrime(X) :- X < 2,!,false.
isPrime(X) :- not(divisible(X, 2)).
主要问题是语句
X mod Y is 0
。谓词is
具有两个(左和右)自变量,但left参数必须是常量或在谓词执行时已统一的变量。我只是交换了这些值。其余代码用于检查数字2(是质数)和小于2(不是质数)的数字我忘了提及比较
Y < X
是错误的,因为您想测试2到X-1之间的所有数字,所以比较包括X。
关于Prolog程序检查数字是否为素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23282097/