この記事は Lisp Advent Calendar 2017 の 17 日目の記事です。 eval は強力ではあるものの、その強力さ故に現代的な Lisp ではあまり使われない。 Lisp 以外の eval のある言語、例えば JavaScript ではその存在はほとんど忘れられているような気がするし、 Ruby でも instance_eval や class_eval といった表現力を弱めた変種が使われることはあれど、素の eval が使われることはほとんどないように思う。 Lisp の場合でも、普通は eval を使わずに簡単な DSL を作って自分でインタプリタを書いてしまうことが多いのだけど、 DSL が複雑になってくると少し面倒さを感じないでもない。 そんなときに R7RS Scheme の eval がちょうどうまく使える例があったので紹介したい。 R7RS Scheme