Почему мой оператор else в прологе выполняется, даже если он не удовлетворяет условию? - PullRequest
0 голосов
/ 13 февраля 2019

Я новичок в Прологе и я сбит с толку, потому что выполняется условие 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 голосов
/ 13 февраля 2019

Ну, проблема в том, что операция или выполняется в строке 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)).

Таким образом, логическая операция или будет работать правильно, и вы получите желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...