печатать от 0 до 10 в порядке возрастания в прологе - PullRequest
0 голосов
/ 27 апреля 2018

Я пробовал следующий код, но он не работал. В чем ошибка в этом коде ..?

asc(0):-
    write(0).
asc(X):-
    asc(X-1),
    write(X).

1 Ответ

0 голосов
/ 27 апреля 2018

Пролог не имеет арифметических выражений, которые автоматически оцениваются в значения, как в других языках. X-1 не обозначает арифметическое значение; это просто термин.

?- X = 5, Y = X - 1.
X = 5,
Y = 5-1.

Чтобы вычислить арифметическое значение, вы должны использовать предикат is/2:

?- X = 5, Y is X - 1.
X = 5,
Y = 4.

Таким образом, вместо вызова asc(X-1) вы должны отдельно вычислить значение X - 1 и передать этот результат рекурсивному вызову:

asc(0) :-
    write(0).
asc(X) :-
    X > 0,
    X1 is X - 1,
    asc(X1),
    write(X).

Страж X > 0 необходим, чтобы избежать бесконечной рекурсии по отрицательным числам.

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