2011-02-17 122 views
1

我想教自己一些序言,以便我可以確定它適合解決我的問題。基本上問題是,由於有關項目之間的交互作用的一系列規則,確定哪些項目可用,不可用,選擇和未選擇。簡單的序言程序

但即使是最簡單的部分我都失敗了!爲了看看我能做些什麼,我大幅減少了問題的大小。下面是我的知識基礎:

selected(A) :- implied(A). 
implied(B) :- implies(A,B),selected(A). 

implied(option_one). 
implies(option_one,option_two). 

當我查詢:

selected(X). 

我只拿回option_two。

似乎有一些非常基本的東西,我不理解這裏,但在我看來,如果option_one也應該回來在列表中(特別是因爲其中一個事實是'暗示(option_one)')。

如果它的事項,我已經試過這,使用P#以及SWI-Prolog的,這給了相同的結果

回答

3

當u有你的第一個答案X = option_two;取得下一個答案

?- selected(X). 
X = option_two ; 
X = option_one. 

或者你可以使用像這樣的smth來顯示所有匹配的東西:

?- selected(X), writeln(X), fail. 
option_two 
option_one 
false. 
+0

哇......我覺得現在真的很愚蠢。我知道它一次只能給出一個結果,但由於某種原因,我認爲再次點擊'Enter'會讓它得到下一個結果。 – 2011-02-17 15:41:29