http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2883

構文解析とは何だったのか。

解法

  • 例として[+c[+a[^bd]]]O[c][O[a][X[b][d]]]に変換します。
  • O、A、Xはそれぞれ2引数を取りor、and、xorするProcで、カリー化されています。
  • 変換された文字列は正しいプログラムなので、evalでバッチリです^^

Python

  • Pythonはfunctools.partialはありますが演算子の形でカリー化することができないので、自前で関数をネストしてカリー化を行います。
  • なおPythonはRubyのProcで必要な特別扱いが必要ないので、括弧は丸括弧を使います。
  • (ところで答案内のtranslateのインポート方法に癖がありますが、Py2/3対応にするにはやむを得ないものです。)

解答例