假设我有知识库
likes(john,mary).
person(mary).
person(john).
如果我们问 prolog 是否
|?- likes(mary,john)
它会回答不,因为我们没有断言。除非我们明确说明,否则有什么方法可以使序言答案未知。
\+ likes(mary,john)
换句话说,我们是否可以要求 prolog 尽可能地对待未绑定的表达式而不是错误的。我一直在使用 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" }
}
//...