2
所以我們剛剛開始學習prolog,並且我很難在包裝的前後環繞我的頭。我們有這個問題的功課,我不知道從哪裏開始。包中彈珠的重量
定義的規則weight(R, O, Y, G, B)
找出如何每種顏色的大理石許多可以包含在每個包,其中R, O, Y, G
,並B
是紅,橙,黃,綠,藍色球,分別編號。彈珠的重量分別爲1, 2, 3, 4, 5
克。假設袋子的尺寸足夠大,以容納總重量爲30
克的所有彈珠。
所以我們剛剛開始學習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 ;
等
那麼我最初試圖像重量(R,O,Y,G,B,W):W#= R + O * 2 + Y * 3 + G * 4 + B * 5。問題是如果我查詢(R,O,1,1,1,30)我得到一個安裝錯誤。我需要能夠做到這一點。 – SpartanHippeis
看我的編輯。 :) –
該域名是我所缺少的。謝謝。我知道問題背後的一般想法,我不知道如何產生所有可能的解決方案。我只是想念域名。 – SpartanHippeis