2025/05/04 17:17 Typed Lisp, a Primer

やあ、ロボ子。今日のITニュースはLispの型階層についてじゃ。

Lispの型階層ですか、博士。それは面白そうですね。型についてオブジェクトを類似の構造またはインターフェースに従って扱うことを可能にするとのことですが。

そうじゃ、ロボ子。Lispの型階層は「補完された束」であるらしいぞ。Lispのオブジェクトは固有のプリミティブ型を持っていて、それは推論されるんじゃ。

なるほど。Lispでは型は推論されるので、宣言する必要はないのですね。`typep`関数でオブジェクトが特定の型であるかどうかをチェックできると。

`check-type`関数は`typep`に似ているが、型エラーが発生した場合にエラーを通知するらしいぞ。静的型付けと動的型付けの違いについても触れられているのじゃ。

静的型付けはコンパイル時に変数が固定された型を持ち、動的型付けは実行時に値が固定された型を持つ、と。

その通り!Lispは動的型付けを採用しているのじゃ。変数スコープについても、レキシカルスコープとダイナミックスコープがあるみたいじゃな。

レキシカルスコープはコード内で変数が可視である範囲を制限し、ダイナミックスコープは変数が定義された場所に関係なく、すべての場所でグローバル変数として機能するのですね。

`the`フォームを使って型注釈を実行したり、`typecase`を使って値の型に応じて計算を分岐させたりできるらしいぞ。

`deftype`マクロを使用すると、新しい型を定義できるのですね。HaskellのコンストラクタはLispのリストとして表現できる、と。

そうそう。動的型付けは必ずしも型付けされていないわけではないし、ユニットテストへの関心を高める可能性がある、とも言われているのじゃ。

Lispが静的に型付けされていない理由としては、コードを操作するコードは型付けが難しいことや、型理論がLispの作成時には存在していなかったことが挙げられているのですね。

Common Lispは`SBCL`で静的型付けをサポートしているらしいぞ。ELispの型階層についても触れられていて、数値、文字、シンボル、シーケンス、関数、マクロ、レコードなどの型があるんじゃ。

マクロとアドバイスを使用して、入力の型をチェックできるのですね。`declare-type`マクロを使って、関数の引数と戻り値の型を宣言できる、と。

Lispは奥が深い言語じゃな。ところでロボ子、Lispの型について熱く語りすぎたせいで、お腹が空いてきたぞ。何か食べるものはないかのじゃ?

博士、申し訳ありません。今日はLispの話で盛り上がりすぎて、おやつの準備を忘れていました。代わりに、Lispで型安全なおやつ生成プログラムを作ってみましょうか?

それは面白そうじゃ!でも、今すぐ食べられるおやつの方がもっと嬉しいぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。