【发布时间】:2015-12-01 17:33:54
【问题描述】:
所以我们刚开始学习 prolog,我很难理解 prolog。我们有这个家庭作业问题,我只是不知道从哪里开始。
定义一个规则weight(R, O, Y, G, B),求出每个包里可以装多少个每种颜色的弹珠,其中R, O, Y, G和B分别是红、橙、黄、绿、蓝弹珠的数量.弹珠的重量分别为1, 2, 3, 4, 5 克。假设袋子的大小足以容纳总重量为30 克的所有弹珠。
【问题讨论】:
所以我们刚开始学习 prolog,我很难理解 prolog。我们有这个家庭作业问题,我只是不知道从哪里开始。
定义一个规则weight(R, O, Y, G, B),求出每个包里可以装多少个每种颜色的弹珠,其中R, O, Y, G和B分别是红、橙、黄、绿、蓝弹珠的数量.弹珠的重量分别为1, 2, 3, 4, 5 克。假设袋子的大小足以容纳总重量为30 克的所有弹珠。
【问题讨论】:
如果你打算只用(比如说)黄色弹珠来解决这个问题,它可能看起来像这样:
weight(Marbles, Weight) :- Weight #= Marbles * 3.
如果你想看看你有多少黄色弹珠,你可以像这样查询 Prolog:
?- weight(Marbles, 30).
Marbles = 10.
你能从这里概括一下吗? :)
编辑
您的问题可以通过提供域来解决。
weight(R,O,Y,G,B,Weight) :-
[R,O,Y,G,B] ins 0..sup,
Weight #= R + O*2 + Y*3 + G*4 + B*5.
当你调用谓词时,你会得到域形式的答案。这通常不是我所期望的,因此调用label/1 会生成解决方案。
?- weight(R,O,Y,G,B,30), label([R,O,Y,G,B]).
R = O, O = Y, Y = G, G = 0,
B = 6 ;
R = O, O = Y, Y = 0,
G = 5,
B = 2 ;
等等
【讨论】: