如何使定义的eval工作?

时间:2012-11-17 05:48:10

标签: scheme racket

我发布了一些其他简单的代码,以澄清正在发生的事情

当我在以下代码中使用eval

#lang racket
(define (test )
   `( (define num 1)
    (define l (list))
    (define num2 (add1 num))
      (displayln num2))) 

(eval (test) (make-base-namespace))

球拍尖叫对我define-values: not in a definition context in: (define-values (num) 1)

我的问题是:

  • 如何让eval处理定义?
  • 如果eval不适用于定义,那么是否有一些可以使其有效的解决方法?

我感谢任何帮助!

我认为这可能是我想在这里做的事情的另一种方式:How can I unsplice a list of expression into code?

2 个答案:

答案 0 :(得分:2)

以下是一个例子:

#lang racket
(define ns (make-base-namespace))
(define top-level-expressions
  '(begin 
     (define x 3)
     (+ x 1)))

(eval top-level-expressions ns)

答案 1 :(得分:1)

正如球拍告诉你的那样,eval需要一个表达式作为参数。您应该将'(define len (make-length 10))传递给eval。请注意引号'

但我不确定你是否真的需要这样做,请首先阅读eval的目的和缺陷。