0
我已經創建了一個用於從標準套牌(52張牌,沒有玩家)中表示撲克牌的數據結構(不知道它是否正確)。每張卡片都有黑桃,心形,鑽石或者俱樂部中的一種,以及其中一個王牌2,3,4,5,6,7,8,9,10,千斤頂,皇后,王:在SML中編寫比較撲克牌的函數
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
。 Ace被認爲是最高等級,其次是國王,女王,傑克,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 value_of_suit suit =
case suit of
spades => 4
| hearts => 3
| diamonds => 2
| clubs => 1
如何從這裏出發,以及是否有這樣做的更好的方法呢?
你是否建議在編號行列中使用'Num of int'之類的東西?如果是這樣,這會增加發生錯誤的機會。問題變量是離散的,並且表現得更好。 – lebowski