2012-01-05 77 views
0

問題是我需要編寫一個能夠諮詢數據庫中產品的謂詞,以便它返回一個填充了價格降低的產品名稱的列表(表示爲在「狀態」。Prolog - 關於事實和列表的練習

domains 
    state = reduced ; normal 
    element = string 
    list = element* 
database 
    producte (string, integer, state) 
predicates 
    nondeterm reduced(list) 
clauses 
    % ---> producte(description , price , state) 
    producte("Enciam",2,reduced). 
producte("Peix",5,normal). 
producte("Llet",1,reduced). 
producte("Formatge",5,normal). 
    %unique case 
    reduced([D]):- 
     producte(D,_,reduced). 
    %general case 
    reduced([D|L]) :- 
     producte(D,_, reduced),retract(producte(D,_,reduced)),reduced(L). 
Goal 
    reduced(List). 

我很感激。 現在,它給了我三個不同的解決方案。我怎麼能強迫謂詞給我一個解決方案嗎?事實上,最後一個?

+0

我不跟着你。 – mkll 2012-01-05 17:59:03

回答

0

由於我不使用visual-prolog,我只會提出一些我found in the doc

reduced(List) :- 
    List = [ Price || producte(_, Price, reduced) ]. 
+0

我很抱歉,但我沒有關注你。我感謝你的興趣。我怎麼處理你寫的那一行。 – mkll 2012-01-06 17:52:40

+0

我編輯過了,現在清楚了嗎? – m09 2012-01-06 18:10:13

+0

但這是微不足道的情況,不是嗎?謝謝 – mkll 2012-01-06 23:50:18

0

什麼時候該列表中的第一個產品是不是降低 - 你有那種情況下沒有規則。

+0

感謝您的建議。 – mkll 2012-01-06 17:38:15

+0

並且隨便你會不會對它的形狀有任何想法?謝謝 – mkll 2012-01-06 18:11:47

+0

當然:如果第一個元素沒有減少,那麼結果應該就是通過減少其餘元素而得到的結果。但是現在你有了一個新問題:如果LAST元素不減少會怎樣? – 2012-01-06 19:52:42