Расширяя ответ z5h на использование eval, методы, приведенные ниже, показывают, как можно написать макрос карты-макроса, если среда взаимодействия реализована в используемой версии R5RS:
(define test-list '((1 2 3 4)
(5 6 7 8)))
;Or if your version of scheme implments interaction-environment then:
(define-syntax trade
(syntax-rules ()
((_ a b c d) (display (list b a d c)))))
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;Careful this is not really mapping. More like combined map and apply.
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(define-syntax map-macro
(syntax-rules ()
((_ mac ls) (let ((mac-list (map (lambda (lst) (cons 'trade lst)) ls)))
(eval
`(begin
,@mac-list)
(interaction-environment))))
))
(map-macro trade test-list)
;outputs: (2 1 4 3)(6 5 8 7)
Так что в прошломВызов map-macro оценивает следующее:
То, что в итоге получается из (тестового списка map-macro trade):
(begin
(trade 1 2 3 4)
(trade 5 6 7 8))
Что не совсем карта, но я верюэто действительно отвечает на ваш вопрос.