Typed Racketのお勉強 (2)
3 Specifying Types
:
を使った修飾は値の定義やローカルの定義でも使えます
(let ()
(: x Number)
(define x 7)
(add1 x))
たいていのバインド式は式の中でも型を書けるようになっています
(define x : Number 7)
(define (id [z : Number]) : Number z)
どっちが推奨とかあるんですかね
言ってもらえないと気になって夜も眠れません(眠れます
どっちかというと前者の書き方のほうが見やすい気がします
この例を見てid
に型はつけたくないなあとか思ったり
よけいな話でした
let
やその変種(letrec
とか)でのバインドにも型修飾が付けられます
> (let ([x : Number 3]) (add1 x))
- : Number
4
つけられます、というからにはつけなくてもいいんだっけ?
> (let ([x 3]) (add1 x))
- : Integer [more precisely: Positive-Index]
4
動きますね
型は推論してくれているっぽい
トップレベルの定義も別に型いらないんだったかな?
> (define y 5)
> y
- : Integer [more precisely: Positive-Byte]
5
> (define (id z) z)
> (id 3)
- : Integer [more precisely: Positive-Byte]
3
> (id "aaa")
- : String
"aaa"
ふーんそうだったか