Пролог Запрос возврата H128 - PullRequest
2 голосов
/ 12 июля 2011

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

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

Ответы [ 3 ]

6 голосов
/ 12 июля 2011

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

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

Именно поэтому интерпретатор показывает X = H128, где H128 - фиктивная неустановленная переменная.

3 голосов
/ 14 июля 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) снимается.

2 голосов
/ 12 июля 2011

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

...