簡體   English   中英

如何在Prolog中定義要求所有的規則?

[英]How to define a rule to require all in Prolog?

擁有知識庫:

must_have(user, car, blue).
must_have(user, car, yellow).
must_have(user, bike, green).

如何定義:

is_a_collector(X):-must_have(X, car, blue),
                   must_have(X,car,yellow),
                   must_have(X,bike,green).

沒有說明所有條件?

我這樣說是因為知識領域很大,我想定義一個捕獲許多條件的規則。

我正在使用Swi-Prolog。

對於SWI-Prolog,您可以使用library(aggregate) foreach/2 library(aggregate) 閱讀有關它究竟是什么的文檔,但實際上,它會創建您需要的連接。

?- foreach(must_have(X, _, _), X = user).
true.

?- foreach(must_have(X, _, _), X = foo).
false.

或者,如果要定義謂詞,

is_a_collector(X) :- foreach(must_have(Y, _, _), Y = X).

但是,@ lurker是對的,你的問題有點不清楚。 建議的解決方案也感覺有些奇怪。 至少,如果您希望能夠聲明任何不返回真理的查詢,那么您的數據庫應該包含其他表。 目前,上面的第一個查詢詢問:

“每個must_have/3事實都有user作為它的第一個參數嗎?”

為此,您可以直接使用forall/2 ,因為您不需要連接。

那你對這個問題的答案是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM