Использование необоснованных фактов в Прологе? - PullRequest
2 голосов
/ 13 ноября 2009

В Прологе вы можете написать основную факт как:

lost(jen).

Вы также можете написать необоснованный факт как:

lost(X).

Имеет ли это какой-то смысл? Не могли бы вы показать мне практический / реальный пример, где используются неосновательные факты?

Спасибо

Ответы [ 2 ]

3 голосов
/ 13 ноября 2009

В другом случае, избегающем списков, большинство случаев "истинно", и вы просто хотите исключить несколько случаев, которые являются ложными. Таким образом, вы намеренно терпите неудачу в этих случаях, а затем позволяете всему остальному пройти.

Тогда вы можете сделать, скажем ...

inhabited(antarctica) :- !, fail.

% all the other continents are inhabited
inhabited(_).
2 голосов
/ 13 ноября 2009

Ну, у вас могут быть и другие вещи, помимо атомов, например, у вас могут быть списки. Как только вы это сделаете, вы можете захотеть узнать об одноэлементном списке, и вы можете получить

oneelement([X]).

Точно так же, скажем, вы хотите сравнить последний элемент в списке

lastelement([X],X).
lastelement([_|Remainder],X) :- lastelement(Remainder,X).

Очень полезный предикат member определяется как

member([X|_],X).
member([_|Remainder],X) :- member(Remainder,X).

Каждый из них использует необоснованный факт в качестве базового случая, сопоставляя специальную форму, которая более конкретна, чем просто lost(X)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...