定义规则以找到给定量S的变化(半美元,四分之一,硬币,镍币和便士的数量),其中0 <0。 S&lt; 100(便士)。规则的格式应为
change(S, H, Q, D, N, P)
我有:
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, /* nickels */
11,12,13,14,15,16,17,18,19,20]),
S is 50*H + 25*Q +10*D + 5*N,
S =< 100,
P is 100-S.
每次我运行它时都是例如:
| ?- change(87, 0, 3, D, 1, P).
或者
| ?- change(73, H, 2, 1, N, 3).
我只是得不到结果
答案 0 :(得分:1)
你在公式中缺少便士。然后,当您查询奇数(实际上,任何数量不是镍的倍数,即您编码的较小单位)时,无法满足。因此,在计算中添加便士,并删除无用的最后2行。
作为样式注释,Prolog在/ 3之间提供,因此您的代码可以像
一样清理change(S, H, Q, D, N, P) :-
between(0,2,H), /* Half-dollars */
etc etc...