Я хочу, чтобы иметь возможность написать:Ракетка макрос для расширения кода
(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'? – stchang
Причина, по которой вы получили ошибку «плохой синтаксис», состоит в том, что '(nota x)' указывает, что ваш макрос принимает только один «аргумент», но вы дали ему два. Как упоминает @stchang, похоже, что вы хотите добавить дополнительный аргумент и включить 'define' в расширение. –