2009-11-12 2 views
2

В Прологе вы можете написать наземный факт как:Использование неземных фактов в Prolog?

lost(jen). 

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

lost(X). 

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

Спасибо,

ответ

3

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

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

inhabited(antarctica) :- !, fail. 

% all the other continents are inhabited 
inhabited(_). 
2

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

oneelement([X]). 

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

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

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

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

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

+0

Я просто хочу сделать замечание, что если вы будете использовать переменную в предложении только один раз (а не 2 или более использований), пролог (в частности, SWI) даст вам varning, например «Warning: /path/to/file.pro:123: Синглтонные переменные: [Var]» Вы должны использовать _ в таких местах. – Xonix

+0

@Xonix: Или просто префикс существующего имени с подчеркиванием, подобным этому: '_Foobar'. Это позволяет избежать однотонального предупреждения, позволяя использовать объяснительное имя. – bcat

+0

@Xonix: In (Sicstus) Prolog вы также должны убедиться, что следующая буква _ - это верхний регистр (например, имя переменной), чтобы избежать предупреждения. – Rune

 Смежные вопросы

  • Нет связанных вопросов^_^