2014-05-07 31 views
1

我一直在试图做一个Prolog的问题来产生质数从1到N,但它不断回答真或假,我找不到错误。 查询例如:generatePrime(10,X)Prolog代码生成素数从1到N

isPrime(2) . 
isPrime(P) :- 
    P > 2 , 
    isDivisible(P , P-1) . 

isDivisible(P , X) :- 
    X > 1, 
    P mod X =\= 0 , 
    isDivisible(P , X-1) . 
isDivisible(_ , X) :- 
    1 is X . 

generatePrime(N , X) :- 
    not(isPrime(N)) , 
    Z is N-1 , 
    generatePrime(Z , X) . 
generatePrime(N, X):- 
    isPrime(N) , 
    X is N , 
    Z is N-1 , 
    generatePrime(Z , X) . 
generatePrime(1 , X) :- 
    X is 1 . 
+1

你能发表一个你试过的查询和你得到的结果的例子吗? – Shevliaskovic

+0

@Shevliaskovic查询是generatePrime(10,X)。 – user3091639

+3

请注意,1不是素数 –

回答

0

我想你想建立一个列表:

generatePrime(1 , []) :- !. 
generatePrime(N , X) :- 
    not(isPrime(N)) , !, 
    Z is N-1 , 
    generatePrime(Z , X) . 
generatePrime(N, [N | X]):- 
    Z is N-1 , 
    generatePrime(Z , X) . 

我没有测试,但这样的事情应该工作。

+0

这工作得很好,谢谢输了。不过我想要的输出是这样的 X = 7 X = 5 X = 3 X = 2 – user3091639