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部は引数渡しをするようにすれば、もう少し簡単なのですが)。