В режиме пользователя в SWI-Prolog я определяю функцию следующим образом:
|: test1(+X,+Y) :- X >= 0, X =:= Y.
А теперь в режиме запроса:
?- test1(1, 1). false.
Я ожидал, что это вернет true, поскольку 1 больше 0, а 1 равно 1.
Так, где я ошибся?
Это то, что вы хотите вместо этого:
test1(X,Y) :- X >= 0, X =:= Y.
А затем:
?- test1(1, 1). true.
Добавление +, - и?перед аргументами предиката не является частью Пролога.Это просто соглашение для документирования использования предикатов.
Вот что говорит документация GNU-пролога :
Режим определяетили нет аргумент должен быть создан при вызове встроенного предиката.Режим кодируется символом непосредственно перед типом.Возможные режимы: +: аргумент должен быть создан. -: аргумент должен быть переменной (будет создан в случае успеха встроенного предиката). ?: аргумент может быть создан в виде экземпляра или переменной.
Режим определяетили нет аргумент должен быть создан при вызове встроенного предиката.Режим кодируется символом непосредственно перед типом.Возможные режимы:
В реальном коде не следует ставить аргументы перед префиксом +.