在球拍中,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中有效,但在程序中无效。
这符合我的期望:
$ 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中有效,但在程序中无效。