美元的Prolog变化

时间:2015-05-04 05:17:03

标签: prolog

定义规则以找到给定量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). 

我只是得不到结果

1 个答案:

答案 0 :(得分:1)

你在公式中缺少便士。然后,当您查询奇数(实际上,任何数量不是镍的倍数,即您编码的较小单位)时,无法满足。因此,在计算中添加便士,并删除无用的最后2行。

作为样式注释,Prolog在/ 3之间提供,因此您的代码可以像

一样清理
change(S, H, Q, D, N, P) :-
 between(0,2,H), /* Half-dollars */
 etc etc...