[static FL]part3: type

pair type: (e1, e2)
     typing: t1*t2, t1,t2分别是e1和e2的值
     取值:#1, #2
     可以nest,但是只能有两项

tuple type:(e1, e2...)
     类似pair,本质是record
     和record(by name)比,是by position, 顺序是有意义的
      语法糖:其实也是{1= e1, 2 = e2},类型t1*t2... 也是 {1:t1, 2:t2...}, #1的意义也是key的意义

record type: {C1=e1, C2=e2...}
     typing: {C1:t1, C2:t2...}
     each-of type
     通过#C1访问
语法糖:对于each-of type(record, tuple)也能使用case expression
     只有一个分支的case r of ({C1 = x1, C2 = x2}) =>e
     可以进一步 在variable binding里加入pattern matching, 写成let val {C1 = x1, C2 = x2} = r in e end
     可以进一步 将pattern写在函数参数中。实际上函数只接收一个参数,只是通过语法糖,将这个参数通过pattern matching取得内容
          =>无需提供参数类型信息了,因为已经在pattern中。type checker会根据xi的用法推断出类型,对于没有推断出的类型使用多态类型'a 'b 'c表示
     无参函数实际上是对传入的 unit值()进行匹配

list type:[e1, e2...]
     typing: 必须类型都是t,表示为t list
     []:空列表,type是任何值的列表,表示为'a list(alpha list)
     e1::list: 在列表中加值。1::[] => [1]
     null: 检查是否为空
     hd: head element of list
     tl: tail list of list

option type: None|Some e
     typing:None: 'a option; Some e:t
     isSome: 是否是Some类型
     valOf: 取得e
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值