0

Ok。それが私の問題です。リスト内の製品のすべての価格を合計する述語を実装する必要があります。しかし、今のところ、私はそれ以上のことはしていません。私は何が間違っているのですか?前もって感謝します。

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). 
4

2 に答える 2

1

免責事項:プロローグに関しては、私は少し頭がおかしいです。また、私は現在、プロローグインタプリタにアクセスできません。

正規の例、リストの合計:

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

findall / 3でリストを作成する:

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

Valsには、合計したいリストがあります。

更新:あなたのコメントによると、私は通訳にアクセスできない私の深さから少し外れています。

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

私はこれが何をすると思うか:

Ifindallによって生成されたValsリストを合計した結果を受け取る単一の目標を使用します。しかし、私がプロローグを使用してから非常に長いので、私がやりたいことをするための構文が正しくないかもしれません。ただし、小さなバリエーションで、1つの目標で目的を達成できます。

于 2012-01-05T17:50:29.080 に答える
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).

これらの線に沿った何かがvisual-prologdocに従って機能するはずですが、それをテストするためにvisual-prologをインストールしたくないのですが...

于 2012-01-05T17:51:37.327 に答える