gpt4 book ai didi

macros - 方案宏产生意外结果

转载 作者:行者123 更新时间:2023-12-02 07:42:37 25 4
gpt4 key购买 nike

有人知道为什么以下会产生预期结果 - (2 4 6)

(defmacro mult2 (lst)
(define (itter x)
(list '* 2 x))
`(list ,@(map itter lst)))

(mult2 (1 2 3))

虽然我预计这个会(带有列表标识符)

(defmacro mult2 (lst)
(define (itter x)
(list '* 2 x))
`(list ,@(map itter lst)))

(mult2 '(1 2 3))

最佳答案

不评估宏“参数”。因此,当您传入 '(1 2 3) 时,即 (quote (1 2 3)),这正是宏所看到的。

附言在 Scheme 中使用卫生宏会更好。下面是一个使用 syntax-case 的例子:

(define-syntax mult2
(lambda (stx)
(define (double x)
#`(* 2 #,x))
(syntax-case stx ()
((_ lst)
#`(list #,@(map double (syntax-e #'lst)))))))

(这仍然不是这样一个宏的惯用写法,但我试图尽可能接近地反射(reflect)你的版本。)

关于macros - 方案宏产生意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9503466/

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