我是Prolog的新手,我感到困惑,因为即使不符合条件,else子句也会被执行。
printNum(A, B) :-
A =< B,
writeln(A),
A1 is A + 1,
ignore(printNum(A1, B))
; A > B,
writeln(error).
如果您尝试使用此代码输入printNum(3, 6)
,则会输出:
3
4
5
6
error
true
我的预期结果是:
3
4
5
6
true
因为A!> B
答案 0 :(得分:-1)
好吧,问题在于或操作是在ignore(printNum(A1, B)); A > B
行执行的,而不是在整个谓词中执行的。如果您稍微修改一下代码:
printNum(A, B) :-
(A =< B,
writeln(A),
A1 is A + 1,
ignore(printNum(A1, B))
;
A > B,
writeln(error)).
这样,逻辑或操作将正确运行,并且您将获得所需的输出。