2012-01-05 4 views
0

Ok。それが私の問題です。私はリスト内の製品のすべての価格を合計する述語を実装する必要があります。しかし、今のところ、私はそれ以上のことはしていません。 私は何が間違っていますか? ありがとうございます。Prolog - 事実上の小さな運動

domains 
    state = reduced ; normal 

database 
    producte (string, integer, state) 
predicates 
    nondeterm calculate(integer) 

clauses 
    % ---> producte(description , price , state) 
    producte("Enciam",2,normal). 
    producte("Llet",1,reduced). 
    producte("Formatge",5,normal). 
    calculate(Import):- 
     producte(_,Import,_). 
    calculate(Import):- 
     producte(_,Import,_), 
     calculate(Import2), 
     Import=Import2+Import,!. 

Goal 
    calculate(I). 
+0

何をしようとしていますか? PROLOGでは、本当のことを指定する必要があります。 "producte(" Enciam "、2、normal)の行。 Enciamは価格2とステータスが正常であることがプロダクトであることは事実です。 "calculate(Import): - producte(_、Import、_)"という行があります。価格のインポートを伴うプロダクトがあるかどうかを、インポートが満たすことを満たすと言います。それは意味をなさない。あなたがリスト内のものの合計を計算する例を望むなら、私は1つを提供して喜んででしょう... – Patrick87

+0

ありがとうございました。しかし、それが "事実/データベース"でなければならないのか? – mkll

答えて

1

免責事項:私はプロローグに関しては少し戸惑っています。また、私は今プロローグ通訳にアクセスできません。

標準的な例は、リストの合計:

sum([], 0). 
sum([Head | Tail], Total) :- sum(Tail, Temp), Total is Head + Temp. 

のfindAll/3でリストを作る:

findall(Val, producte(_, Val, _), Vals). 

ヴァルスあなたは合計したいあなたのリストを持っています。

更新:あなたのコメントごとに、私はインタープリタにアクセスすることなく、少し深いところから外れています。

がfindAllのによって生成されたあなたのヴァルスリストを、合計した結果を受けて、あなたの単一の目標Iを、使用しています。私はこれがないと思う何

calculate(I) :- sum(Vals, I), findall(Val, producte(_, Val, _), Vals). 

。しかし、プロローグを使用してから、私が望むことをするための文法の権利さえないかもしれないので、それはずっとずっと続いています。しかし、少しばらつきがあれば、1つの目標だけで達成できるはずです。

+0

私は助けに感謝しています。私はちょうど "目標"で1つのパラメータを渡すことができます:私は(受け取る総価格として)。 – mkll

+0

@mkll - 更新が役に立たない場合は、うまくいけばMogさんの答えで十分です(私にはうまくいくようです)。インタプリタにアクセスすることなく自分の答えを修正するための試行錯誤プログラミングはできません。 – ccoakley

+0

本当にありがとうございました。私は問題を解決した! – mkll

0

findAllの一部:

calculate(Price) :- 
    List = [ Price || producte(_, Price, _) ], 
    sum_list(List, 0, Sum). 

sum_listパーツ:

sum_list([], Acc, Acc). 
sum_list([Head|Tail], Acc, Sum) :- 
    NewAcc is Acc + Head, 
    sum_list(Tail, NewAcc, Sum). 

私は視覚プロローグドキュメントに従って動作するはずですこれらの線に沿って何かを推測するが、私はちょっとたく視覚インストールしないでくださいそれをテストするプロローグ...

+0

私はその問題で迷っています。 2つのパラメータを渡す必要がある述語を実装すると思いますか? calculate(List、Sum)リストと整数。 – mkll

+0

私は編集しました、今すぐビジュアルプロローグの方法に合うはずです。 – m09

+0

ありがとうございました。私は問題を解決しました! – mkll

関連する問題