Typed Racketのお勉強 (11)
6 Typed-Untyped Interaction
Typedじゃない普通のRacketの関数からTyped Racketの関数は普通に呼べます
Typed RacketからRacketの関数を呼ぶにはrequire/typed
で型を指定してやります
#lang racket
(provide (struct-out pt)
distance)
(struct pt (x y))
(define (distance p1 p2)
(sqrt (+ (sqr (- (pt-x p2) (pt-x p1)))
(sqr (- (pt-y p2) (pt-y p1))))))
ここで定義されたでdistance
をTyped Racketから呼ぶには以下のように書きます
(chap06-01-distance.rktは上のファイル名)
(require/typed "chap06-01-distance.rkt"
[#:struct pt ([x : Real] [y : Real])]
[distance (-> pt pt Real)])
実行
> (distance (pt 3 5) (pt 7 0))
- : Real
6.4031242374328485
自分の作ったファイルだけでなく標準ライブラリからも同様にしてrequire/typed
できます
Typed RacketからRacketの関数を呼ぶ場合、Contractを用いて型のチェックが
行われるため、場合によってはオーバーヘッドが発生するので注意、だそうです