我是SWI-Prolog的新手,我想检查Prolog的主要功能.
prime(N) :-
N > 1,
M is N - 1,
check(N, M).
check(_, 1).
check(N, M) :-
M > 1,
R is N - M * N / M,
R > 0,
P is M - 1,
check(N, P).
Run Code Online (Sandbox Code Playgroud)
但是当我问2 + 2
或其他运营商一样(*)/2
,(/)/2
......在序言这样说的:undefined procedure: (+)/2
.我认为这是为了see
或tell
.我重新分配see(user)
,tell(user)
但这个错误再次发生.为什么?
在您使用的SWI prolog 6.0.2分区中,它返回浮点数.因此prime(13)
,例如将失败,因为余数为0.整数除法使用运算符//
.但检查prolog SWI功能rem
和mod
.
你也希望在第一次定义后有一个剪切check
,否则prolog将探索第二个定义,它将返回false.Cut确保在检查了小于N的所有自然数后,它会成功停止.
这是在SWI Prolog 6.0.2中按照需要运行的更正代码.
prime(N) :-
N > 1,
M is N - 1,
check(N, M).
check(_, 1) :- !.
check(N, M) :-
M > 1,
R is N mod M,
R > 0,
P is M - 1,
check(N, P).
Run Code Online (Sandbox Code Playgroud)