【发布时间】:2014-09-13 10:40:48
【问题描述】:
首先这是一个任务,所以我不想要一个完整的解决方案:)
我要计算纸牌游戏二十一点中一副牌的价值。
规则是所有 A 是 1 或 11。
假设我的手牌是:(Ace, 5),我的手牌现在是 16。下一张牌是 6,我的手牌现在是 (Ace, 5,6) 22,但我之前已经计算的 A 现在必须变为一所以我的手是12。
我的 Hand 数据类型由
递归定义data Hand = Empty | Add Card Empty
所以用固定值计算一手牌是由
完成的valueOfHand (Add c h) = cardValue c + valueOfHand h
改变之前出现的值的模式是什么?
【问题讨论】:
-
你为什么不直接使用
type Hand = [Card]?这样可以更容易地以惯用的方式解决这个问题。 -
@leftaroundabout 我不知道它在提供的文件中是这样定义的 :)
-
我不知道什么是“所有 A 都是 1 独占或 11”。应该是这个意思。
-
你的
Hand类型本质上是一个列表。我会查看List([]) 的Monad实例,并使用它的不确定性来检查你的A 的所有可能读数,然后选择你手牌的价值,不管是什么(会有不止一个,尤其是如果您以某种方式设法绘制了不止一张 A)。 -
@BartekBanachewicz 可以说我手里有两张 A 都必须是 1 或 11 他们不能有单独的值