[plt-scheme] Executing code created on the fly
On Jul 26, Ihe wrote:
> I tried doing this with eval and ran into problems. I am also having
> problems using macros or syntax rules e.g
>
> (define-syntax make-program
> (syntax-rules ()
> [(make-program expr) (lambda (x y) expr)]))
>
> I want to be able to say
> (let ((prog-body blah))
> (make-program prog-body))
>
> and have a different procedure returned depending on the value prog-
> body is set to.
>
> Alas this does not work.
Of course it doesn't -- `blah' in the above will be evaluated like any
other value -- the use of `make-program' makes it just as if you
wrote:
(let ((prog-body blah))
(lambda (x y) prog-body))
> Basically I want to be able to execute these programs created on the
> fly and to be able to capture the source of each program ... I don't
> really care how it is done (except not with eval due to problems
> already experienced).
Are you sure you need `eval'? If you do, then you'll need to set up a
proper namespace for it -- the default namespace is empty (and that's
probably causing the problems you're talking about).
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://www.barzilay.org/ Maze is Life!