Scheme 如何使评估工作在定义上?

Scheme 如何使评估工作在定义上?,scheme,racket,Scheme,Racket,我发布了一些其他简单的代码,以澄清发生了什么 当我对以下代码使用eval时 #lang racket (define (test ) `( (define num 1) (define l (list)) (define num2 (add1 num)) (displayln num2))) (eval (test) (make-base-namespace)) 球拍向我尖叫定义值:不在定义上下文中:(定义值(num)1) 我的问题是: 如何使eval工

我发布了一些其他简单的代码,以澄清发生了什么

当我对以下代码使用
eval

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

(eval (test) (make-base-namespace))
球拍向我尖叫
定义值:不在定义上下文中:(定义值(num)1)

我的问题是:

  • 如何使
    eval
    工作在定义上
  • 如果
    eval
    不是设计用于定义的,那么是否有一些变通方法可以使其工作
谢谢你的帮助


我想这可能是我想在这里做的事情的另一种方式:

正如racket告诉你的,
eval
需要一个表达式作为参数。您应该将
'(定义len(使长度为10))
传递到
eval
。注意引号


但我不确定您是否真的需要这样做,请阅读first的目的和缺陷。

正如racket告诉您的,
eval
需要一个表达式作为参数。您应该将
'(定义len(使长度为10))
传递到
eval
。注意引号

但我不确定您是否真的需要这样做,请阅读first的目的和缺陷。

以下是一个示例:

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

(eval top-level-expressions ns)
以下是一个例子:

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

(eval top-level-expressions ns)
你已经看过文件了吗?你已经看过文件了吗?