3
我是新的prolog,试图解决这个经典的硬币更换问题。Prolog:硬币更换
变化(M,P,N,d)化合物与式即M> = 0和M = P + 5 * N + 10 * d 这里是我的方法
change(M,P,N,D) :-
M is P+5*N+10*D,
P is M - (5*N+10*10).
几个试验例
change(100,10,8,5).
True
change(X,10,8,5).
X = 100.
但是,如果我尝试
change(100,P,8,5).
它给了我 “论据不够实例化”,而不是P = 10 这是什么东西? (0,M,P)之间,(0,M,N)之间,(0,M,D)之间使用谓词 修复我的代码,M是P + 5 * N + 10 * d。
POSS可重复的[Prolog打破更小的金额](http://stackoverflow.com/questions/29338495/prolog-break-money-into-smaller-amounts) – 2015-04-01 06:20:31
你得到错误的原因是'是/ 2评估一个_arithmetic表达式:它不是一个纯粹的“逻辑”谓词。您似乎已经知道至少有一种解决方法,看到重复的问题和更好的方法的答案。 – 2015-04-01 06:42:29