LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

Ну придумали бы хотябы спец макрос для такого.

Так он пишется в 3 строки:

(define-syntax lexical-eval
  (syntax-rules ()
    [(_ cmd) (eval cmd)]
    [(lexical-eval cmd var ...) ((eval `(lambda (var ...) ,cmd)) var ...)]))

(let ([a 1]) (lexical-eval '(+ a 1) a)) ; => 2

Исходная версия monk, :

Ну придумали бы хотябы спец макрос для такого.

Так он пишется в 3 строки:

(define-syntax (lexical-eval stx)
  (syntax-case stx ()
    [(_ cmd) #'(eval cmd)]
    [(lexical-eval cmd var ...)
     #'((eval `(lambda (var ...) ,cmd)) var ...)]))

(let ([a 1]) (lexical-eval '(+ a 1) a)) ; => 2