2009-11-12 45 views
2

在Prolog你可以写一个地面事实为:在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). 

每个这些使用非接地事实作为基础的情况下,通过匹配的一种特殊形式,它比只是更具体210

+0

我只想做一个备注,如果你会使用一个变量子句中只有1次(不2种或更多用法),序言(特别是SWI)会给你varning,就像“Warning:/path/to/file.pro:123: Singleton variables:[Var]” 你应该在这些地方使用_。 – Xonix 2009-11-12 22:22:10

+0

@Xonix:或者只是用这样的下划线作为现有名称的前缀:'_Foobar'。这样可以避免单身人士的警告,同时让你使用一个解释性的名字。 – bcat 2009-11-14 23:45:49

+0

@Xonix:在(Sicstus)Prolog中,您还必须确保_后的字母是大写字母(如变量名称)以避免警告。 – Rune 2014-05-11 10:07:54