let多相を持った言語を実装したよ
これは何?
Types and Programming Languages (The MIT Press)やプログラミング言語の基礎理論 (情報数学講座)を読んだけど、let多相がよく分からない。
ならば、let多相を持った簡単なプログラム言語を作ってみよう。
名前は「Scala + let多相」なんでscalet。別にScalaの拡張というわけではない。
どんな機能があるの?
定数は、intとbool。
scalet> 42 - : int = 42 scalet> true - : bool = true
構文はletとif、あと関数を作るfn。
scalet> if true then 42 else 0 - : int = 42 scalet> let x = 42 in x - : int = 42 scalet> fn x -> x - : (a0 -> a0) = -
あと適当に型推論もしてくれる。
scalet> fn x -> x 42 - : ((int -> a5) -> a5) = - scalet> let id = fn x -> x in (id id) 42 - : int = 42
ダウンロード/インストール
http://bitbucket.org/mzp/scalet/のDownloadからダウンロードできます。
ビルドはMaven2をインストールしたあと
$ mvn package
で完了します。
実行方法
$ scala -cp target/scalet-0.1.jar org.howdyworld.scalet.App scalet>
できないこと
- let x = 42のような変数宣言
- intはあるけど、算術演算関数はない
- boolはあるけど、論理演算関数はない