2015-12-01 22 views
2

所以我們剛剛開始學習prolog,並且我很難在包裝的前後環繞我的頭。我們有這個問題的功課,我不知道從哪裏開始。包中彈珠的重量

定義的規則weight(R, O, Y, G, B)找出如何每種顏色的大理石許多可以包含在每個包,其中R, O, Y, G,並B是紅,橙,黃,綠,藍色球,分別編號。彈珠的重量分別爲1, 2, 3, 4, 5克。假設袋子的尺寸足夠大,以容納總重量爲30克的所有彈珠。

回答

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 ;          

+0

那麼我最初試圖像重量(R,O,Y,G,B,W):W#= R + O * 2 + Y * 3 + G * 4 + B * 5。問題是如果我查詢(R,O,1,1,1,30)我得到一個安裝錯誤。我需要能夠做到這一點。 – SpartanHippeis

+0

看我的編輯。 :) –

+0

該域名是我所缺少的。謝謝。我知道問題背後的一般想法,我不知道如何產生所有可能的解決方案。我只是想念域名。 – SpartanHippeis