Пролог-запрос возвращает H128

В приведенном ниже запросе сначала я получаю X = H128, откуда это взялось? Кроме того, почему он возвращает да? Это потому, что переменная X на самом деле не определена, и мы проверяем это условие?

?- not(X==3).
X = H128 
yes

person General_9    schedule 12.07.2011    source источник


Ответы (3)


В вашем запросе используется неопределенная переменная (X). При проверке того, создан ли X с термином 3 it (X==3), происходит сбой, потому что X не является экземпляром.

Следовательно, not(X==3) будет успешным, так как механизм пролога не может доказать X==3. Таким образом, ваш интерпретатор пролога возвращает «да» (из-за отрицания как неудачного подхода интерпретатора), а X остается нереализованным.

Вот почему интерпретатор показывает X = H128, где H128 — фиктивная переменная без конкретизации.

person gusbro    schedule 12.07.2011

Каким было ваше первоначальное намерение? Возможно, вы хотели указать, что X не равно 3. Для неравенства многие системы Prolog предлагают dif/2:

?- dif(X,3).
dif(X,3).

В этом запросе мы запрашиваем значения для X, которые не равны 3. Итак, какие значения не равны? На самом деле довольно много: придумайте 1, 2, термин 3+3, c, список [2,3,4] и многое другое. Таким образом, предоставление конкретного ответа, такого как X = 4, исключило бы многие другие правильные ответы. Однако ответ здесь таков: запрос выполняется для всех X, которые не равны 3. Таким образом, фактическая оценка откладывается на более поздний момент.

?- dif(X,3), X = 3.
false.

Здесь мы попали в ситуацию, когда X получил значение 3, что не соответствует действительности.

?- dif(X,3), X = 4.
X = 4.

А здесь принимается конкретное действительное значение, и ограничение dif(4,3) снимается.

person false    schedule 13.07.2011

Да, потому что переменная X не связана с первой целью, not(X==3). На самом деле метапредикат not/1 никогда не может создать привязку, даже если он успешен. Это потому, что успех not означает, что внутренняя цель терпит неудачу. Обратите внимание, что not(X=3) потерпит неудачу, потому что X=3 может завершиться успешно, когда X свободен (и может быть привязан к значению 3).

person hardmath    schedule 12.07.2011