2014-02-01から1ヶ月間の記事一覧

λで前方参照

Cっぽいλ計算にトポロジカルソートを利用した前方参照を付けてみました。 トップレベルだけは、前方参照できます。 main=mul(add(1)(2))(3) add=(a)=>(b)=>a+b mul=(a)=>(b)=>a*b なプログラムがちゃんと動きます。 以下ソースです。 package C2E7 import ut…

トポロジカルソート

前方参照できる型推論をするには依存関係を調べて順番に並べる必要があります。 どう調べたら良いのかと調べてたらトポロジカルソートをするのが基本みたいでした。https://gist.github.com/ThiporKong/4399695tsort.scalaで検索したら凄く短いけど、分から…

四則演算

Haskellの型システムが気になって何年かぶりにHaskellを使ってみました。 もう殆ど忘れていたのだけど、一から勉強するよりは楽に使えたのだと思います。 正規表現ライブラリを使って標準入力の引数を四則演算するだけの物を作ってみました。 import Text.Re…

C2E6

いい加減な実装ですけど、関数を追加しました。ラムダ計算だと簡単に追加出来ていいです。 {val add = (a)=>(b)=>a+b; add(1)(2)} 1+2=3を計算出来ます。{(a)=>(b)=>a+b}(1)(2)だと名前無しで実行出来る。ひたすら手計算で環境をああしてこうしてって考えて…

C2Eを変えてみる

パーサ追加して、簡単な評価器を付けてみましたよ。 これをどんどん拡張していけば、バックエンドはmincamlとかと同じ物を使ったり出来て楽しいのではないかと思います。 package C2E5 import util.parsing.combinator._ object parser extends RegexParsers…

C2E

C言語様な言語をML様な言語に変換するプログラムを作ってみました。 package C2E trait C case class CInt(a:Int) extends C case class CId(a:String) extends C case class CAdd(a:C,b:C) extends C case class CVal(a:String, b:C) extends C case class …