我想在Racket中定义函数,该函数使用未作为参数给出的参数,但将在范围中定义 . 这可能吗?
例如,
(define (fun1 x) (get-value x data))
(define (another-function args . data)
... (map (eval '((fun1 . x) (fun2 . y)))) ...
)
fun1
需要引用数据结构,但它将作为参数给出 fun1
将被调用的函数
我对Racket没有经验,无法在网上找到解决我问题的方法 . 很抱歉给您带来不便,感谢您的回复 .
编辑:
我应该给出更准确的解释 .
关键是,我不使用像 struct
这样的数据结构 . 相反,我给出一个包含数据的列表,对其应用一些更改,并返回更新的数据 .
有问题的部分是,因为我的数据是作为参数给出的,当我在其他地方定义一个函数时,我不能使用这些数据,因此我收到了 unbound identifier
的错误
代码段:
(define (var x) (get-value x data)) ;Should return value of x from data
;Error due to previous part: "unbound identifier in module in: data"
(define (myapply func expr data) (eval (cons(func (map (eval expr))))))
> (myapply '+ '((var x) (var y)) '((x 3) (y 4)))
7
1 回答
我们有标准的词法封闭 . 例如 . 我们可以做一个咖喱程序:
如果要动态更改值 . 例如 . 您可以通过在调用变量时设置变量来更改一个过程的行为 . 使用parameters在
#!racket
中提供了动态变量 . 这是一个例子:如果
p
是一个正常的词法变量,这将不起作用: