用于扩展代码的 Racket 宏
Racket macro for expanding code
我希望能够写作:
(nota E2 82)
而不是:
(define E2
(network ()
[sunet <= sine-wave 82]
[out = (+ sunet)]))
我知道我可以使用宏来做到这一点并试着写下这个:
(define-syntax (nota stx)
(syntax-case stx ()
[(nota x) #'(network ()
[sunet <= sine-wave x]
[out = (+ sunet)])]))
但是我得到这个错误:
nota: bad syntax in: (nota E2 82)
最简单的解决方案是
(define-syntax-rule (nota x y)
(define x
(network ()
[sunet <= sine-wave y]
[out = (+ sunet)])))
好吧,这太糟糕了。你真的不需要写这个宏;应该有一种形式可以为网络提供固定输入。
其实是有的。但是......它没有记录,也没有很好地命名。它目前称为 fixed-inputs
,但我打算将其重命名为 network-const
,并记录下来。
感谢您就此提示我!
约翰
我希望能够写作:
(nota E2 82)
而不是:
(define E2
(network ()
[sunet <= sine-wave 82]
[out = (+ sunet)]))
我知道我可以使用宏来做到这一点并试着写下这个:
(define-syntax (nota stx)
(syntax-case stx ()
[(nota x) #'(network ()
[sunet <= sine-wave x]
[out = (+ sunet)])]))
但是我得到这个错误:
nota: bad syntax in: (nota E2 82)
最简单的解决方案是
(define-syntax-rule (nota x y)
(define x
(network ()
[sunet <= sine-wave y]
[out = (+ sunet)])))
好吧,这太糟糕了。你真的不需要写这个宏;应该有一种形式可以为网络提供固定输入。
其实是有的。但是......它没有记录,也没有很好地命名。它目前称为 fixed-inputs
,但我打算将其重命名为 network-const
,并记录下来。
感谢您就此提示我!
约翰