我是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行代码我认为我正在处理正确的金额。我是否需要就给定金额制定额外规则?
答案 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...
我认为你需要编译你的脚本......