Макрос "аргументы" не оцениваются.Таким образом, когда вы передаете '(1 2 3)
, то есть (quote (1 2 3))
, это именно то, что видит макрос.
PS Вам гораздо лучше использовать гигиенические макросы в Scheme.Вот пример использования syntax-case
:
(define-syntax mult2
(lambda (stx)
(define (double x)
#`(* 2 #,x))
(syntax-case stx ()
((_ lst)
#`(list #,@(map double (syntax-e #'lst)))))))
(Это по-прежнему не так, как идиоматически написан такой макрос, но я попытался отразить вашу версию как можно точнее.)