2014-03-19 74 views
3

我有一個程序,如果一個整數是素數,則返回true,否則爲false。替代Prolog中的 +?

但是,我使用了內置的謂詞'\ +',事實證明我不允許使用,我怎樣才能避免使用它?

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). 

任何幫助將不勝感激!

+0

您不允許使用'不(_)'? –

+1

沒有不幸的不是。 – hunterge

回答

1

在Prolog中沒有/ 1是通過組合cut-fail(所謂的NAF-negation by failure)實現的。

代碼應該是(未經測試)

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