2010-11-01から1ヶ月間の記事一覧

パターンマッチの実装(3)

型でのマッチングの実装を一部実装しました。 これによって関数のオーバーロードが出来るようになりました↓ print(10) # print_intが呼ばれる print("Hello World") # print_stringが呼ばれる関数定義時にはこんな感じで書きます↓ fib(n!Int): fib(n-1) + fi…

最適化コンパイラ屋がHaskellの副作用について考えてみる

Haskellに副作用があるのか?というのは難しいテーマだと思いますが、少なくとも最適化理論での一般的な「副作用」の定義ではHaskellは全く副作用がない言語と言えると思います。 理論的に美しいという点がHaskellの設計の一番重要なところだと思うのですが…

パターンマッチングの実装(2)

Rowlの動的なパターンマッチエンジンの構成について書きます。 まず、インタプリタ内にfuntableという関数テーブル(関数名 × 引数の数 → 関数実体)があります。 関数の実体は 関数本体(バイトコード) 関数定義のリスト(ASTではなくコンパイルした形) からな…

追記

以下の記事の「ブロックローカルで関数定義を再定義できる」という仕組みには問題がありましたのでやめることにしました。 何か別の形で矛盾なく同様の機能が使えるようにしたいと思います。 fib(n): fib(n-1) + fib(n-2) fib(0): 0 fib(1): 1 print_int(fib…

パターンマッチの実装(1)

自分はコンパイラの実装言語にはパターンマッチがあると楽だと思っているのでrowlにもパターンマッチエンジンを実装しています。以下の論文を参考にしています。 http://portal.acm.org/citation.cfm?id=507641&dl= これまで変数パターン、Dontcareパターン…