1

我是 Prolog 中的一个完整的菜鸟。我正在做一个任务,我创建一个零钱计数器,总计S(以美分为单位),0 <= S <= 100。所以我需要显示半美元、四分之一、一角硬币、五分钱的数量。

这是我的代码:

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 美分并且我需要 3 个季度和 1 个镍时......我收到一个错误说明uncaught exception: error(existence_error(procedure,change/6),top_level/0)

在我最后的 3 行代码中,我认为我正在正确处理给定的金额。我需要对给定的金额制定额外的规则吗?

4

1 回答 1

0

你错过了美分!我建议使用 between/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 回答