В Common Lisp я могу определить двухуровневый макрос и развернуть макрос следующим образом:
(defmacro calc (a op b)
(list op a b))
(defmacro twice (x)
(list 'calc x '+ x))
(twice 10)
(macroexpand-1 '(twice 10))
(macroexpand '(twice 10))
Вывод:
20
(CALC 10 + 10)
(+ 10 10)
Теперь я пытаюсь сделать то же самое в схеме MIT:
(define-syntax calc
(syntax-rules ()
((_ a op b)
(op a b))))
(define-syntax twice
(syntax-rules ()
((_ x)
(calc x + x))))
(twice 10)
Как я могу сделать эквивалент macroexpand-1
и macroexpand
в схеме MIT?