在rack中,eval在repl中工作,但在程序中不工作



这实现了我所希望的:

$ 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中工作,但不是一个程序。

最新更新