假设我有知识基础prolog答案可以不确定,而不仅仅是或不是?
如果我们问Prolog自己是否
|?- likes(mary,john)
会回答没有因为我们并不能断言。除非我们明确说明,否则有任何方法可以使序言回答未知。
\+ likes(mary,john)
换句话说,我们可以问序言治疗未绑定表达式尽可能而不是假的。我一直在使用IDP系统,它允许存在性量化和对待非断言的关系,好像是无约束的而不是假的,但我想使用更主流的东西。 http://adams.cs.kuleuven.be/idp/server.html
例如在IDP可以使语句
vocabulary V{
type Person
Likes(Person,Person)
}
theory T: V{
//Everyone might like someone and disallow narcisiscm
!x : ?y: Likes(x,y) & ~Likes(x,x).
}
//some instance without special meaning
structure S:V{
Person={A..C}
}
procedure main(){
//Print all possible solutions
printmodels(allmodels(T,S))
}
其中产量
Number of models: 27
Model 1
=======
structure : V {
Person = { "A"; "B"; "C" }
Likes = { "A","B"; "A","C"; "B","A"; "B","C"; "C","A"; "C","B" }
}
//...
你知道的[封闭世界假定(https://en.wikipedia.org/wiki/Closed-world_assumption)与[开放世界假定(https://en.wikipedia.org/wiki/Open-world_assumption)? –
你是说prolog只能回答一个封闭的系统吗?因为我想你可以说我问它可以考虑一个开放的系统,或者它在这方面是有限的,我应该尝试一种不同的语言。 – awiebe
'喜欢(玛丽,约翰)'会成功的,因为'mary'和'john'是人。这就是你的第二个条款所说的。 –