在
swish控制台中跟踪此内容:
isInteger(X) :- isInteger(X,0).
isInteger(0,I) :- ws(I), format('0 reached\n').
isInteger(X,I) :- wrout('>', X,Y,I), ID is I+1, isInteger(Y,ID), wrout('<', X,Y,I), X is Y+1, wsucc(I).
wrout(C,X,Y,I) :-ws(I),format('~a X=',C),write(X),format(',Y='),write(Y),format('\n').
wsucc(I) :- ws(I),format('success\n').
ws(0).
ws(N) :- N>0, format('__'), ND is N-1, ws(ND).
通过? - isInteger(2)
检查2是否为整数(但不要调用Next,否则会发生无限搜索!)
> X=2,Y=_G5707
__0 reached
< X=2,Y=0
__> X=_G5707,Y=_G6473
____0 reached
__< X=_G5707,Y=0
__success
< X=2,Y=1
success
true
使用?- isInteger(I)
枚举整数
0 reached
I = 0
"
下一个
"
> X=_G5328,Y=_G5926
__0 reached
< X=_G5328,Y=0
success
I = 1
"下一个"(请注意,我们从缩进'__'重新开始)
__> X=_G5926,Y=_G391
____0 reached
__< X=_G289,Y=0
__success
< X=_G257,Y=1
success
I = 2
"下一个"(请注意,我们从缩进处重新开始)
____> X=_G391,Y=_G3260
______0 reached
____< X=_G391,Y=0
____success
__< X=_G289,Y=1
__success
< X=_G257,Y=2
success
I = 3
非常好。
我将向本地团队解释这个问题。这里有一个整数枚举过程的示例,带有一些“原始符号”。希望可以自我解释。