1

私はPrologの完全な初心者です。私は、合計S(セント)、0 <= S <= 100を取ることができる変更カウンターを作成する割り当てに取り組んでいます。したがって、半ドル、4分の1、10セント硬貨、5セント硬貨の数を表示する必要があります。

これが私のコードです:

change(S,H,Q,D,N,P) :-
            member(H,[0,1,2]),      /* Half-dollars */      
            member(Q,[0,1,2,3,4]),  /* quarters */  
            member(D,[0,1,2,3,4,5,6,7,8,9,10]) ,    /* dimes */    
            member(N,[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]), 
            /* ^^ nickels ^^ */

            S is 50*H + 25*Q +10*D + 5*N,
            S =< 100,
            P is 100-S.

だから私の問題は、私?- change(87,0,3,D,1,P).が入力している金額が87セントで、4分の3と1つのニッケルが必要な場所のようなものを計算しようとするとです.....私は次のようにエラーが発生しますuncaught exception: error(existence_error(procedure,change/6),top_level/0)

最後の3行のコードで、指定された量を正しく処理していると思いました。与えられた金額に関して追加のルールを作成する必要がありますか?

4

1 に答える 1

0

あなたはセントが恋しい!そして、範囲を表すために/3の間を使用することをお勧めします。

...,
between(0,100,Cents),
...,

...,
S is 50*H + 25*Q +10*D + 5*N + Cents,
...,

テスト:

?- change(87,H,Q,D,N,Cents,P).
H = Q, Q = D, D = N, N = 0,
Cents = 87,
P = 13 ;
H = Q, Q = D, D = 0,
N = 1,
Cents = 82,
P = 13 ;

WRTerror(existence_error...スクリプトをコンパイルする必要があると思います...

于 2012-12-11T23:15:12.277 に答える