我是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)