Слишком сложно? Тогда запросите консультацию специалиста!
Наша компания занимается тем, что помогает студентам выполнять различные учебные работы на заказ. Вы можете ознакомиться с перечнем выполняемых работ, а так же с их стоимостью на странице с ценами.
Отрицание как неудача
Рассмотрим пример. Пусть некоторая Мэри любит всех животных.
Это записывается: likes(mary,X):-annimal(X).
Мэри не любит змей:
likes(mary,X):-snake(X),!,fail.
fail- специальная цель, встроенный предикат,
который всегда терпит неудачу.
Решение можно записать в виде одного правила, используя дизъюнкцию целей:
likes(mary,X):-snake(X),!,fail; annimal(X).
Рассмотрим другой пример.
Отношение different(X,Y) будет истина, если X и Yразличны.
| different(X,X):-!,fail. или different(X,Y):-X=Y,!,fail. different(X,Y). | ||
Если Xи Y сопоставимы, то цель differentтерпит неудачу.
Иначе Xи Yразличны, и цель differentуспешна.
Или в одном предложении
different(X,Y):-X=Y,!,fail;true.
Здесь true- встроенный педикат, который всегда истина.
И в том и другом случае более удобно указывать, что отношение истинно, если цель ложна. Для этой цели используется предикат not.
not(Goal). -истина, если Goal-ложь, и наоборот not(Goal)ложно, если Goal успешна.
Это можно записать в виде:
not(Goal):-Goal,!,fail;true.
Запись аналогична сделанным ранее и поэтому последние примеры можно переписать следующим образом:
likes(mary,X):-annimal(X),not(snake(X)).
или
different(X,Y):-not(X=Y).
Использование notтребует осторожности. Рассмотрим пример:
r(a).
g(b).
p(X):-not(r(X)).
?-g(X),p(X).
yes
?-p(X),g(X).
no