Le 08/01/2023 à 10:46, yarl baudig a écrit : > What if I replace > > (define-syntax define-enumerate-type > (syntax-rules () > ((_ name->int (name id) ...) > (define-syntax name->int > (syntax-rules (name ...) > ((_ name) id) ...))))) > > with > > (define-syntax define-enumerate-type > (syntax-rules () > ((_ name->int (name id) ...) > (define-syntax name->int > (syntax-rules () > ((_ name) id) ...))))) > > ? Not going to work. (define-syntax define-enumerate-type   (syntax-rules ()     ((_ name->int (name id) ...)      (define-syntax name->int        (syntax-rules ()          ((_ name) id) ...))))) (define-enumerate-type my-enum   (member1 1)   (member2 2)) (my-enum member2) ⇒ 1 The define-enumerate-type invocation expands to (define-syntax my-enum   (syntax-rules ()     ((_ member1) 1)     ((_ member2) 2))) and since member1 is not declared as a literal in the first argument to syntax-rules, it matches anything.