On 15 Dec 2011, at 11:21, Andy Wingo wrote: > The "delayed evaluation" thread is a bit long and confusing, so I would > like to try to summarize it. > > Lilypond has a way to embed Lilypond code in Scheme, and Scheme code in > Lilypond code. The former uses a reader macro, #{#}. The latter uses > specially-marked variables and expressions, specifically, those preceded > by $ or #. ... > It took some time for everyone to understand the problem. In the end, > there were four workable possibilities. > > 1) Keep using closures.
When doing a parser on top of Guile, I noticed one must first build an unevaluated closure, and only thereafter call the evaluator. Scheme has some restrictions forcing this, for example, the lambda cannot appear as a free symbol, though it is possible in Guile using scm_sym_lambda. It might be useful with a variation of scm_eval_string() that only parses and builds the closure, but not calls the evaluator. Hans