假設我有知識基礎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'是人。這就是你的第二個條款所說的。 –