LoginSignup
8
5

More than 5 years have passed since last update.

Typed Racketの簡単過ぎる紹介 ~静的型のLisp~ (後日加筆更新予定)

Last updated at Posted at 2015-11-30

さて、はじまりました。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
8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5