2016-04-03 3 views
3

Недавно я увидел программу в Prolog, используя предикат # =/2. Я смотрел это на the SWI prolog website где они определили его какЧто означает # = в Prolog?

арифметическое выражение X равно Y. Когда рассуждая над целыми числами, заменить в/2 при # =/2, чтобы получить более общие отношения.

То, что я не понимаю, об этом, как # =/2 может быть более «общим», так как это только для целых чисел.

ответ

6

Из документации entry page:

Они реализуют чистых отношений между целыми выражениями и может быть использовано в все направления

Просто пример:

?- X+3 #= X*2. 
X = 3. 

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

?- X+3 is X*2. 
ERROR: is/2: Arguments are not sufficiently instantiated 

На странице is/2, вы можете увидеть подпись

-Number is +Expr 

где +Expr означает, что он должен быть отшлифованы.

Кроме того, левый аргумент является/2 на самом деле должен атомарным

?- 3+3 is 3*2. 
false. 

несмотря мы знаем выше заявление должно быть правдой ...

Примечание: имя CLP (FD) немного «преуменьшает», как указано @false, можно назвать CLP (Z), поскольку конечность домена часто может быть ослаблена.