Function 编写一个用于在SML中比较扑克牌的函数
我已经创建了一个数据结构,用于从标准牌组(52张牌,没有小丑)中表示扑克牌(不确定是否正确)。每张牌上有一套黑桃、红桃、钻石或梅花,还有一套王牌、2、3、4、5、6、7、8、9、10、杰克、皇后、国王:Function 编写一个用于在SML中比较扑克牌的函数,function,sml,smlnj,Function,Sml,Smlnj,我已经创建了一个数据结构,用于从标准牌组(52张牌,没有小丑)中表示扑克牌(不确定是否正确)。每张牌上有一套黑桃、红桃、钻石或梅花,还有一套王牌、2、3、4、5、6、7、8、9、10、杰克、皇后、国王: datatype suit = spades | hearts | diamonds | clubs datatype rank = ace | king | queen | jack | ten | nine | eight | seven | six | five | four | thre
datatype suit = spades | hearts | diamonds | clubs
datatype rank = ace | king | queen | jack | ten | nine | eight | seven | six | five | four | three | two
type playing_card = suit * rank
下一步是编写一个函数greaterCard
,该函数对我刚才声明的新数据类型进行操作。函数应该以两张扑克牌作为参数。如果第一张卡的值高于第二张卡的值,则函数应返回true
,否则返回false
。王牌被认为是最高等级,其次是国王、王后、杰克、10、9、…、2。如果两张牌的等级相同,则套装顺序如下:黑桃>红桃>梅花>钻石
首先,我创建了两个子函数,这样每个等级和套装都会得到一个整数形式的值,以便稍后我可以比较这些整数,看看一张牌是否大于另一张牌:
fun value_of_rank rank =
case rank of
ace => 14
| king => 13
| queen => 12
| jack => 11
| ten => 10
| nine => 9
...
| two => 2
以及:
我如何从这里开始,有没有更好的方法 卡片比较需要两个阶段:
fun compare_cards(c1,c2)
let val val_c1 = value_of_rank(c1)
val val_c2 = value_of_rank(c2)
in
if val_c1 = val_c2
then compare_on_suit
else compare_on_rank
end
此外,等级的
值将更优雅,案例更少。考虑哪些情况可以组合。你是否建议使用编号为<代码> num的代码?如果是这样,这将增加出错的机会。问题变量是离散的,最好是这样表示。
fun compare_cards(c1,c2)
let val val_c1 = value_of_rank(c1)
val val_c2 = value_of_rank(c2)
in
if val_c1 = val_c2
then compare_on_suit
else compare_on_rank
end