成员谓词问题,换一美元

时间:2012-12-11 22:56:03

标签: prolog declarative

我是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个镍......我得到一个错误陈述{{1} }

我最后3行代码我认为我正在处理正确的金额。我是否需要就给定金额制定额外规则?

1 个答案:

答案 0 :(得分: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 ;

WRT error(existence_error...我认为你需要编译你的脚本......

相关问题