所以我们刚刚开始学习prolog,而且我很难将我的头脑包裹起来。我们家庭作业有这个问题,我不知道从哪里开始。
定义规则weight(R, O, Y, G, B)
,了解每个包中可以包含多少种大理石的大理石,其中R, O, Y, G
和B
是红色,橙色,黄色的数量,绿色,蓝色大理石,分别。大理石的重量分别为1, 2, 3, 4, 5
克。假设袋子的大小足以容纳所有大理石,总重量为30
克。
答案 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 ;
等