Prolog 程序检查一个数是否为素数 [英] Prolog Program To Check If A Number Is Prime
问题描述
我根据质数只能被 1 和自身整除的逻辑编写了以下程序.因此,我只是将其划分为所有大于一且小于自身的数字,但我似乎遇到了问题,因为我将所有输入的数字都视为真实.这是我的代码...
I wrote the following program based on the logic that a prime number is only divisible by 1 and itself. So I just go through the process of dividing it to all numbers that are greater than one and less than itself, but I seem to have a problem since I get all entered numbers as true. Here's my code...
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 的初学者,但设法解决了你的问题.
I'm a beginner in Prolog but managed to fix your problem.
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
有两个(左和右)参数,但左参数必须是常量或谓词执行时已经统一的变量.我只是交换了这些值.其余代码用于检查数字 2(是素数)和小于 2 的数字(不是素数)
The main issue was the statement X mod Y is 0
. Predicate is
has two (left and right) arguments, but the left argument has to be a constant or a variable that is already unified at the moment that the predicate is executing. I just swapped these values. The rest of the code is for checking number 2 (which is prime) and number less than 2 (that are not primes)
我忘了说比较 Y <X
有问题,因为您想测试 2 和 X-1 之间的所有数字,该比较包括 X.
I forgot to mention that the comparison Y < X
is buggy, because you want to test for all numbers between 2 and X-1, that comparison includes X.
这篇关于Prolog 程序检查一个数是否为素数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!