一袋弹珠的重量

Weight of marbles in a bag

所以我们才刚刚开始学习序言,我很难全神贯注于序言。我们的家庭作业遇到了这个问题,我只是不知道从哪里开始。

定义一个规则weight(R, O, Y, G, B),求出每个袋子里每种颜色的弹珠的数量,其中R, O, Y, GB分别是红色、橙色、分别是黄色、绿色、蓝色弹珠。弹珠的重量分别为 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 ;                                     

等等