昨天晚上復(fù)習(xí)Racket第二周的第一節(jié)課裂垦,發(fā)現(xiàn)需要先復(fù)習(xí)一下useful datatypes這一節(jié)課恢恼。
之前datatypes的例子絕大多數(shù)都是silly的末秃。
最簡單的例子晰搀,就是用datatypes來構(gòu)建枚舉類型(enumeration)恋谭。例如可以使用datatypes來描述撲克牌。每張撲克牌分為兩部分扩灯,一個(gè)是花色,一個(gè)是牌面大小霜瘪。
datatype suit = Club | Diamond | Heart | Spade
datatype rank = Jack | Queen | King | Ace | Num of int
接下來提到了一個(gè)不太好的代碼風(fēng)格珠插,就是很多值用int類型表示。對于學(xué)生而言颖对,有些同學(xué)沒有學(xué)號(例如被開除之類的)捻撑。不太好的風(fēng)格會(huì)使用-1等值來表示。而比較好的風(fēng)格是使用int option缤底。
接下來講的是recursive datatypes顾患。
datatype exp = Constant of int
? ? ? ? ? ? ? ? ? ? ? ?| Negate of exp
? ? ? ? ? ? ? ? ? ? ? ?| Add of exp * exp
? ? ? ? ? ? ? ? ? ? ? ?| Multiply of exp * exp
fun eval e =?
? ? case e of
? ? ? ? Constant i => i
? ? ? ? ?| Negate e1 =>~(eval e1)
? ? ? ? ?| Add(e1, e2) => (evale1) + (eval e2)
? ? ? ? ?| Multiply(e1, e2) => (eval e1) * (eval e2)