包中的弹珠重量

时间:2015-12-01 17:33:55

标签: prolog logic

所以我们刚刚开始学习prolog,而且我很难将我的头脑包裹起来。我们家庭作业有这个问题,我不知道从哪里开始。

定义规则weight(R, O, Y, G, B),了解每个包中可以包含多少种大理石的大理石,其中R, O, Y, GB是红色,橙色,黄色的数量,绿色,蓝色大理石,分别。大理石的重量分别为1, 2, 3, 4, 5克。假设袋子的大小足以容纳所有大理石,总重量为30克。

1 个答案:

答案 0 :(得分:2)

如果你要解决这个问题只是(说)黄色大理石,它可能会是这样的:

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 ;