(import procedural-macros) (import-for-syntax (only srfi-13 string-concatenate) (only srfi-1 any) ) (define (make-name components) (string->symbol (string-join (map symbol->string components) "/"))) (define-macro (defmeth components . optionals) (cond ((null? components) (syntax-error "The endpoint path must not be empty")) ((any (lambda (opt) (not (= (length opt) 2))) optionals) (syntax-error "The optional parameters must have the form (type param)")) (else (let ((name (make-name components))) `(define (,name ,@components) 42))))) (defmeth (a b c)) ; Error: during expansion of (defmeth ...) - unbound variable: make-name ; ; Call history: ; ; <syntax> (##core#begin (defmeth (a b c))) ; <syntax> (defmeth (a b c)) ; <eval> (cdr89 form92) ; <eval> (seq-ref119 seq124 0) ; <eval> (seq-tail121 seq124 1) ; <eval> (null? components) ; <eval> (any (lambda (opt) (not (= (length opt) 2))) optionals) ; <eval> (make-name components) <--