2017-02-14 8 views
0

После простой 'eval' заявление хорошо работает в командной строке DrRacket (как указано на https://docs.racket-lang.org/guide/eval.html):Eval работы по командной строке, но не в файле сценария

> (eval '(+ 1 2)) 
3 

Однако, если сохранено в файле сценария (главная площадь DrRacket) и запустить, она производит ошибку:

#lang racket 

(eval '(+ 1 2)) 

ошибка:

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

Где проблема?

+2

Возможный дубликат [Невозможно использовать eval при вводе пользователя в Racket] (http://stackoverflow.com/questions/37246033/unable-to-use-eval-on-user-input-in-racket) – Sylwester

+0

Вы должен ссылаться на взаимодействия в DrRacket как на окно взаимодействия или на ответ –

ответ

1

В Ракетка, это правильный способ запуска eval внутри сценария:

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


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

Пожалуйста, обратитесь к documentation.

+0

Почему он работает в командной строке без какого-либо определения-namespace-anchor? – rnso

+0

@rnso в командной строке, 'current-namespace' устанавливается в пространство имен файла. В окне вы должны явно установить его самостоятельно или передать второй параметр в 'eval'. –

Смежные вопросы