昨天晚上复习Racket第二周的第一节课,发现需要先复习一下useful datatypes这一节课。
之前datatypes的例子绝大多数都是silly的。
最简单的例子,就是用datatypes来构建枚举类型(enumeration)。例如可以使用datatypes来描述扑克牌。每张扑克牌分为两部分,一个是花色,一个是牌面大小。
datatype suit = Club | Diamond | Heart | Spade
datatype rank = Jack | Queen | King | Ace | Num of int
接下来提到了一个不太好的代码风格,就是很多值用int类型表示。对于学生而言,有些同学没有学号(例如被开除之类的)。不太好的风格会使用-1等值来表示。而比较好的风格是使用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)