В PLT Scheme можно так (только я не могу понять, зачем это надо)
(require (lib "defmacro.ss"))
(define-macro (foo a)
`(define
,(string->symbol (string-append (symbol->string a) "1")) 1)
`(define
,(string->symbol (string-append (symbol->string a) "2")) 2))
> (foo x) x1 x2
> 1
> 2
Вот что-то подобное я пытался подсунуть в scheme48, но оно ругалось
>(только я не могу понять, зачем это надо)
Мне нужен был макрос типа (define-struct struct-name name1 name2 name3...), который резервиут symbol для struct, и герерит is-struct?, make-struct , get-name1, set-name1 ...
>да, стандартными hygienic macros такое сделать нельзя
Наверно примерно это я и хотел услышать. Посмотрю в сторону MZScheme, спасибо
У меня в pocket scheme и в qscheme работает следующая конструкция:
(define-macro (dummy-def x)
`(begin
(define ,(string->symbol (string-append (symbol->string x) "1")) 1)
(define ,(string->symbol (string-append (symbol->string x) "2")) 2)))