gpt4 book ai didi

macros - eval 宏未绑定(bind)变量(CHICKEN 方案)

转载 作者:行者123 更新时间:2023-12-05 07:25:59 24 4
gpt4 key购买 nike

我正在尝试评估一个列表,该列表包含一个宏函数中的变量,该宏函数在 lambda 中定义了一个变量,但其中的 eval 不能

(define-syntax MYVAR
(syntax-rules ()
[(_ varname value body ...) ((lambda (varname) body ...) value)]))

(define mylist '(list P Q))
(print mylist)
(MYVAR P 1
(MYVAR Q 2
(print P Q) ;;everything prints fine in here
(print (eval mylist))))


<eval> ((lambda2127 (P) (MYVAR Q 2 (print P Q) (print (eval mylist)))) 1)
<eval> ((lambda2129 (Q) (print P Q) (print (eval mylist))) 2)
<eval> (print P Q)
<eval> (print (eval mylist))
<eval> (eval mylist)
<syntax> (list P Q)
<eval> (list P Q) <--

=> Error: unbound variable: P

我假设 eval 尝试在我的宏编译之前求值但不确定,

有没有办法重用列表并在宏中对其求值?

我尝试过使用define-for-syntax 但出现了同样的错误

最佳答案

我建议您尝试:

(MYVAR P 1
(MYVAR Q 2
((print (eval 'mylist)))))

在此之后你的输出应该是

(list P Q)

为什么这样做?在 Scheme 中,代码是使用括号嵌套的。

所以,例如

(print (eval (list 1 2 3)))

Scheme 将尝试找到 1 的定义并将 2 和 3 作为参数传递。

鉴于

(print (eval '(list 1 2 3)))

将打印

(list 1 2 3)

简而言之,单引号就像一个转义字符。

关于macros - eval 宏未绑定(bind)变量(CHICKEN 方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54602955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com