在球拍中,eval 在 repl 中起作用,但在程序中不起作用

in racket, eval works in the repl but not in a program

这符合我的期望:

$ racket
Welcome to Racket v8.3 [cs].
> (eval (list + 1 (list + 5 5)))
11

但这不是:

$ cat demo.rkt
#lang racket

(display (eval (list + 1 (list + 5 5))))
$ racket demo.rkt
?: function application is not allowed;
 no #%app syntax transformer is bound
  at: (#<procedure:+> 1 (#<procedure:+> 5 5))
  context...:

我做错了什么?

我搜索了一下这个错误,好像从来没有人遇到过这种情况

好吧,我会把问题和答案留在这里,以防其他人搜索该错误:

https://docs.racket-lang.org/guide/eval.html#%28part._namespaces%29

$ cat > demo.rkt
#lang racket

(define ns (make-base-namespace))
(display (eval (list + 1 (list + 5 5)) ns))
$ racket demo.rkt
11

都解释了它在repl中有效,但在程序中无效。