Prolog-一个查找一组和特定值之和的值的程序
我想制作一个接收3个参数的程序:Prolog-一个查找一组和特定值之和的值的程序,prolog,Prolog,我想制作一个接收3个参数的程序: 例如,清单1中的硬币:[5,2,1] 我们想要得到的价值总和 总计为该特定值的硬币列表-此列表是列表1的子列表 (允许重复相同的元素,例如:要达到4,我们可以使用列表[2,2]) 因此,程序应该做两件事: change([5,2,1],4[2,2])将返回Yes(原因2+2=4) change([5,2],6,硬币)将返回Coins=[2,2,2] 这是我的尝试: change(_,0,Res). change([X|Xs],Sum,Cs):- Sum <
[5,2,1]
[2,2]
)change([5,2,1],4[2,2])
将返回Yes
(原因2+2=4)change([5,2],6,硬币)
将返回Coins=[2,2,2]
change(_,0,Res).
change([X|Xs],Sum,Cs):- Sum <X, change(Xs,Sum,Cs).
change([X|Y],Sum,[X|Res]):- Sum>=X, Sum2 is Sum - X, change([X|Y],Sum2,Res).
change(\u0,Res)。
变化([X | Xs],Sum,Cs):-Sum=X,Sum2是Sum-X,变化([X | Y],Sum2,Res)。
对于第一条规则的最后一个参数,您需要将Res
更改为[]
。此外,应在同一规则中添加切割运算符,以避免多次获得相同的结果
change(_, 0, []):-!.
change([X|Y], Sum, [X|Res]):-
Sum >= X, !, % remove the cut operator to get all solutions
Sum2 is Sum - X,
change([X|Y], Sum2, Res).
change([_|Xs],Sum,Cs):-
change(Xs, Sum, Cs).
可以使用member/2从列表中“猜测”元素 只要小心终止
change(_,0,[]).
change(Coins,Sum,[C|Cs]) :-
Sum > 0, member(C, Coins), Rest is Sum-C, change(Coins,Rest,Cs).
你的问题到底是什么?第一条规则应该是
change(uu,0,[])。
([]
而不是Res
)。。它不像我做的那样工作。你为什么要把它改成[]?我不这么认为。一旦你得到了获得值所需的集合,你应该得到0。因为对于零和,你不需要硬币(一个空的硬币列表)。当我运行它时,我得到了一个语法错误。。。您不能假设列表已排序。我确信语法错误不是因为答案中的代码。但是你需要所有的解决方案,还是只需要一个有最大价值的解决方案?那么它在你的电脑上运行的很好?我需要它来给出第一个答案。。不一定是大硬币..我修正了语法错误。。。但是当我运行change({2,5},4,{2,2})时。这是因为Prolog中的列表是用方括号括起来的。尝试更改([2,5],4[2,2])。
应该可以。