【发布时间】:2020-02-09 05:22:30
【问题描述】:
来自 Racket 文档的示例总是带有 lambda:https://docs.racket-lang.org/syntax/Defining_Simple_Macros.html
而我的define-syntax-parser是这样的:
(require syntax/parse/define)
(define-syntax-parser sp
[_ #'(lambda (x) (set! x (add1 x)))]
)
(define a 0)
((sp) a)
(display a)
可能做这样的事情(删除lambda)?
(require syntax/parse/define)
(define-syntax-parser sp
[(f x) #'(set! x (add1 x))]
)
(define a 0)
(f a)
(display a)
结果应为1,但仍为0。而且 Scheme/Racket 不通过引用传递(?!),那么如何在 lambda 之外更改这些变量?
这里有一个相关的答案:https://stackoverflow.com/a/8998055/5581893
但这是关于已弃用的define-macro (https://docs.racket-lang.org/compatibility/defmacro.html)
【问题讨论】:
标签: lambda syntax macros scheme racket