さて、はじまりました。Lisp Advent Calendarです。
今回は初日であるのと、私自身,他のAdvent Calendarが被ってしまったのと、Splatoonのせいで、かなり雑を書きますがご容赦ください。(後日加筆していきます。)
最初の一日目は気楽に書いて行こうかと思います。
最近、Typed Racketをなんとなく書いているので、
なんとなく、Typed Racketを紹介して行こうかと考えています。
Typed Racket入門
静的片付けのLisp?
さて、殆どのLisp方言は、動的型付けの言語であり、静的型付けのLispはなかなか珍しいですね。他に、Shenなどもあります。
Typed Racket
typed racketはLisp系の言語でも珍しく、静的な型付け言語です。
簡単なサンプルと型のエラー
適当に雑な例を書いてみました。
型を付けないバージョン
#lang racket
(struct complex-number
(real image))
(define (magnitude complex-number)
(sqr (+ (expt (complex-number-real complex-number) 2)
(expt (complex-number-image complex-number) 2))))
型付けバージョン
#lang typed/racket
(struct complex-number
([ real : Real ]
[ image : Real ]))
(: magnitude (-> complex-number Real))
(define (magnitude complex-number)
(sqr (+ (expt (complex-number-real complex-number) 2)
(expt (complex-number-image complex-number) 2))))
さて、エラーはこんな感じで表示されます。
> (string-length 10)
. Type Checker: type mismatch
expected: String
given: Positive-Byte in: 10