为什么即使不满足条件,我在prolog中的else语句也会执行?

时间:2019-02-13 16:13:33

标签: prolog

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

1 个答案:

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

这样,逻辑操作将正确运行,并且您将获得所需的输出。