2017-02-14 67 views
0

以下简单'eval'声明EVAL作品行之有效的DrRacket的命令行(如在https://docs.racket-lang.org/guide/eval.html提到):在命令行,但不是在脚本文件

> (eval '(+ 1 2)) 
3 

但是,如果保存在脚本文件(主要区域DrRacket)和运行,它会产生错误:

#lang racket 

(eval '(+ 1 2)) 

错误:

+: unbound identifier; 
also, no #%app syntax transformer is bound in: + 
> 

问题在哪里?

+2

可能重复的[无法在球拍中使用eval用户输入](http://stackoverflow.com/questions/37246033/unable-to-use-eval-on-user-input-in-racket) – Sylwester

+0

您应该将DrRacket中的交互称为交互窗口或repl –

回答

1

球拍,这是运行eval脚本里面的正确方法:

(define-namespace-anchor a) 
(define ns (namespace-anchor->namespace a)) 


(eval '(+ 1 2) ns) 
=> 3 

请参阅documentation

+0

为什么它在命令行上没有任何define-namespace-anchor? – rnso

+0

@rnso在命令行中,'current-namespace'被设置为文件的命名空间。在窗口中,您必须自己明确设置它,或者将第二个参数传递给'eval'。 –

相关问题