我想用 eval 评估 Racket 中的表达式。例如,我的表达式是: (+ x 1)... 但我希望 x 是值列表中的每个值。我已经尝试过 let 但我现在知道 eval 没有看到用 let 定义的变量。我已经阅读了 abut namespace ,但仍然不知道如何将它们应用于我的问题。谢谢 !
最佳答案
这是你想要的吗?
> (map (lambda (n) (+ n 1)) '(2 5 3 1 99 12))
'(3 6 4 2 100 13)
如果你的表达式被引用,你可以
(define ns (make-base-namespace))
(define expr '(+ x 1))
(for/list ((x '(2 5 3 1 99 12)))
(eval `(let ((x ,x)) ,expr) ns))
=> '(3 6 4 2 100 13)
但我敢肯定,如果您提供更多背景信息,会有更好的方法。
关于namespaces - 使用 eval 评估 Racket 中的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22742733/