Проблема с переменными в прологе - PullRequest
0 голосов
/ 04 июня 2011
     num(N) :- No=N, write(No), nl.

     check(S) :- No==S -> write(Ok) ; write(Not ok).

Когда я звоню num(5), он печатает 5. Однако после звонка num(5), когда я звоню check(5), он печатает Не в порядке. Я думаю, это из-за области видимости переменных. Как я могу заставить ее работать, я имею в виду переменную Нет, как глобальную переменную, так что я могу проверить ее значение в других пунктах?

Ответы [ 2 ]

3 голосов
/ 04 июня 2011

вы можете использовать глобальные переменные из swipl или assert / retract

, однако использование глобальных переменных немного противоречит парадигме декларативного программирования, поскольку нарушает прозрачность ссылок

1 голос
/ 04 июня 2011

В Прологе нет глобальной переменной. Если вам нужна переменная во всех предложениях, передайте ее в качестве аргумента в этих предложениях. Например, вы используете:

check(S, N0) :- N0==S -> write('Ok') ; write('Not ok').

и звоните check(5, 5) или check(S, 5) как хотите.

...