История изменений
Исправление monk, (текущая версия) :
syntax->datum нормально. А вот convert-sexp — явный признак того, что делается что-то не так.
Правильно должно быть как-то так:
#lang racket
(require (for-syntax racket/syntax))
(define-syntax (make-maker stx)
(syntax-case stx ()
[(_ producer input-id ((id val) ...))
#'(define-syntax (producer stx)
(syntax-case stx ()
[(_ suffix input-val)
(with-syntax ([id (syntax-local-introduce
(format-id #'id "~a~a" (syntax-e #'id)
(syntax-e #'suffix)))] ...
[input-id #'input-val])
#'(begin (define id val) ...))]))]))
(make-maker produce-definitions input-id
((id1 (list input-id))
(id2 (list 1 id1))
(id3 (list 1 (list id1 (list id2 2))))))
Исходная версия monk, :
syntax->datum нормально. А вот convert-sexp — явный признак того, что делается что-то не так.
Правильно должно быть как-то так:
#lang racket
(require (for-syntax racket/syntax))
(define-syntax (make-maker stx)
(syntax-case stx ()
[(_ producer input-id ((id val) ...))
#'(define-syntax (producer stx)
(syntax-case stx ()
[(_ suffix input-val)
(with-syntax ([id (syntax-local-introduce
(format-id #'id "~a~a" (syntax-e #'id) (syntax-e #'suffix)))] ...
[input-id #'input-val])
#'(begin (define id val) ...))]))]))
(make-maker produce-definitions input-id
((id1 (list input-id))
(id2 (list 1 id1))
(id3 (list 1 (list id1 (list id2 2))))))