The*_*rza 4 macros define-syntax pattern-matching racket
我希望能够写:
(nota E2 82)
Run Code Online (Sandbox Code Playgroud)
代替:
(define E2
(network ()
[sunet <= sine-wave 82]
[out = (+ sunet)]))
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用宏来做到这一点,并尝试写这个:
(define-syntax (nota stx)
(syntax-case stx ()
[(nota x) #'(network ()
[sunet <= sine-wave x]
[out = (+ sunet)])]))
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
nota: bad syntax in: (nota E2 82)
Run Code Online (Sandbox Code Playgroud)
最简单的解决方案是
(define-syntax-rule (nota x y)
(define x
(network ()
[sunet <= sine-wave y]
[out = (+ sunet)])))
Run Code Online (Sandbox Code Playgroud)