Rubyforgeにプロジェクト申請してみた
72時間後までに結果が来るらしい。
プロジェクトできた:
これは、
require "patternmatching" include PatternMatching def calc(code) make(code) { seems as {plus(:x, :y)} do calc(x) + calc(y) end seems as {mul(:x, :y)} do calc(x) * calc(y) end seems something do code end } end code = build {plus(mul(100, 100), 200)} p calc(code) #=> 10200
といった感じで、パターンマッチ処理や部分メソッド定義をできるようにさせるモジュールです。
これは、自作している言語上でパターンマッチを実装した方法を、ほぼそのままpure Rubyに移植してみたものです。Rubyは、フレーム(binding)からの名前解決が独特なので、表現を優先した結果、thread safeでない等、振る舞いが少し変になってます。(action部は引数渡しをするようにすれば、もう少し簡単なのですが)。