kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

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"

ふーんそうだったか