在Prolog中替代\ +?

时间:2014-03-19 16:48:29

标签: prolog primes predicate built-in

我有一个程序,如果一个整数是素数,则返回true,否则返回false。

但是我使用了内置谓词'\ +',但事实证明我不允许使用它,我怎么能不使用它呢?

is_prime(2).
is_prime(3).
is_prime(P) :- P > 3, P mod 2 =\= 0, \+ has_factor(P,3).  

has_factor(N,L) :- N mod L =:= 0.
has_factor(N,L) :- L * L < N, L2 is L + 2, has_factor(N,L2).

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

使用组合cut-fail(所谓的NAF - negation by failure)实现了Prolog中的

not / 1。

代码应该是(未经测试的)

...
is_prime(P) :- P > 3, P mod 2 =\= 0, has_factor(P,3), !, fail.
is_prime(P) :- P > 3, P mod 2 =\= 0.