intro# 最近、五十嵐先生のプログラミング言語の基礎概念を読んでいました。コンパクトにlet多相までの知識がまとまっており非常に読みやすかったです。 OCamlの学習がてら実際に言語を実装してみようと思い、 筑波大学の講義資料を参考にさせていただきました。 環境構築・実装にあたってはいくらか大変だった部分があるのですがこれらは気が向いたら別途記事にします。 duneの使い方 OCamlでのテストの仕方 OCamlのCI環境の構築 on GitHub Actions OCamlでのパーサーコンビネータの作り方・使い方 Menhirやocamlyaccなどは意図的に使いませんでした 今回作ったもの自体はこちらにあります。watiko/minicaml 振り返り# さて、参考書では最終的にlet多相を有した言語としてPolyTypingML4というものを扱います。文法や型についての定義は以下
■ [types] 型推論のある言語作った まだλ計算に毛が生えたようなものなので、Hello Worldくらいしか動かないですが。 https://github.com/yhara/boom TAPLを読んだからには*1静的型付け言語の一つでも作らなければならないと思って、とりあえず動くとこまで実装した。Boomという名前は適当に付けたのであとで変えるかもしれない。 最初はTAPLのfullreconをベースにしようと思ったのだけど、動かしてみたらこいつは多相型が実装されてなくて(練習問題になってた)、pi8027さんのtypeinferをベースにすることにした。 動かし方 Ruby 2.1が必要*2。 $ git clone https://github.com/yhara/boom $ gem i bundler $ bundle install $ bundle exec rspe
型推論に興味はあるけど、抽象的な説明が多く難しそうだと思っている方々。基礎的なことを押さえておけば、型推論器は簡単に実装できます。 ここでは、私が JavaScript で書いた型推論器を例に、型推論の基本的なアルゴリズムの一例を具体的に説明していきます。解説対象は、ibis-js-1.0.0です。 型推論の可視化ツールを使いながら読むとよりわかりやすいかもしれません。 目次 型変数と単一化 多相型 let と let rec バリアント型
こないだ「Haskellのforallについて理解したことを書いておく(ランクN多相限定)」の記事を書いたときにHindley-Milner型推論アルゴリズム*1を調査するにあたって、こちらにある「Scala by Example」の16章にあるScalaでの実装例をGroovyに書きなおしたので晒しておきます。 以下のような型検査・推論ができます。実行はできません。 def listLenTest = LetRec('len', Lam('xs', App(App(App(Var('if'), App(Var('isEmpty'), Var('xs'))), Var('zero')), App(Var('succ'), App(Var('len'), App(Var('tail'), Var('xs')))) )), App(Var('len'), App( App(Var('cons'
追記: この記事を書いてから早2年弱。今は数式のほうがわかりやすいなあと思うようになりました。 これは何? この記事は、最近 Hindley Milner (Algorithm W) 型推論を理解したばかりの私が、型推論のことをなるべくわかりやすく解説するものです。 簡略化したOCamlのようなコードが登場します。 わかりやすさ重視で書いていくつもりなので、専門用語(自由変数とか)はあまり出てきません。 間違いなどあったらコメントしていただけると幸いです。 まずは単相から ここからは図を使って説明していきます。(ビジュアルなほうがわかりやすいハズ) とても簡単な例 以下にとても簡単なコードを示します。 見ればわかりますが、xの型はintですね。 ですが、どのようにしてintだとわかったのでしょうか。 すでにわかっていることを書き出しだしてみました。リテラルの右肩を見てください。 1の型は当
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く