(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)	<--