Простой вопрос о синтаксисе пролога - PullRequest
1 голос
/ 26 января 2011

В режиме пользователя в SWI-Prolog я определяю функцию следующим образом:

|: test1(+X,+Y) :- X >= 0, X =:= Y.

А теперь в режиме запроса:

?- test1(1, 1).
false.

Я ожидал, что это вернет true, поскольку 1 больше 0, а 1 равно 1.

Так, где я ошибся?

1 Ответ

5 голосов
/ 26 января 2011

Это то, что вы хотите вместо этого:

test1(X,Y) :- X >= 0, X =:= Y.

А затем:

?- test1(1, 1).
true.

Добавление +, - и?перед аргументами предиката не является частью Пролога.Это просто соглашение для документирования использования предикатов.

Вот что говорит документация GNU-пролога :

Режим определяетили нет аргумент должен быть создан при вызове встроенного предиката.Режим кодируется символом непосредственно перед типом.Возможные режимы:

  • +: аргумент должен быть создан.
  • -: аргумент должен быть переменной (будет создан в случае успеха встроенного предиката).
  • ?: аргумент может быть создан в виде экземпляра или переменной.

В реальном коде не следует ставить аргументы перед префиксом +.

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