【发布时间】:2015-04-01 05:02:43
【问题描述】:
我是 prolog 的新手,试图解决这个经典的硬币找零问题。
change(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。 这是什么原因?
edit : 通过使用 between predicate 来修复我的代码 介于(0,M,P),介于(0,M,N),介于(0,M,D),M为P+5*N+10*D。
【问题讨论】:
-
您得到错误的原因是
is/2计算了一个算术表达式:它不是一个纯粹的“逻辑”谓词。您似乎已经知道至少一种解决此问题的方法;查看重复的问题和答案以获得更好的方法。
标签: prolog coin-change