嗨,我有問題總結我的手,因爲一個Ace可以是1或11.我怎樣才能使一個功能,需要在手中,即[卡]並計算總值?哈斯克爾21點遊戲
這是我到目前爲止有:
其中val已經定義並從卡返回值的數組handValue :: [Card]->[Int]
handValue [] = 0
handValue (x:xs) = sum((val x)++([handValue xs]))
。 val(「Ace」,「Hearts」)給出[1,11] val(「Five」,「Hearts」)給出[5]
任何指針將不勝感激。
編輯:duplodes建議後,我有這樣的:
handValue :: [Card]->[Int]
handValue [] = 0
handValue (x:xs) =
if (val x ==[1,11])
then (map sum (sequence [[1,11], handValue xs]))
else [ sum [(val x)]++([handValue xs])]
這是一個機械的選擇,是否將一個王牌視爲1或11:將其視爲11,除非總分將超過21。用戶不需要選擇。 IOW,我認爲n.m.的解決方案是一個很好的方法(如果只有人會解釋它爲什麼會起作用)。 – luqui
我對紙牌遊戲的無知已經顯現出來......在任何情況下,這意味着應該有一個自動決定覈算手的部分總數或從nm選擇小於或等於21的最大和的方式「解決方案。 – duplode
@duplode我看不出如何在我的例子中使用它。我編輯了我的解決方案。 – John