private/check-syntax.ss
(module check-syntax mzscheme
  (provide lambda-formals? check-formals check-symbols)
  
  ;; returns true if stx is legitimate syntax for
  ;; a lambda expression's formal argument list.
  (define (lambda-formals? stx)
    (let loop ((stx stx) (accum '()))
      (syntax-case stx ()
        (()                        (not (check-duplicate-identifier accum)))
        (x       (identifier? #'x) (not (check-duplicate-identifier (cons #'x accum))))
        ((x . y) (identifier? #'x) (loop #'y (cons #'x accum)))
        (_ #f))))
  
  (define (check-formals stx)
    (andmap lambda-formals? (syntax->list stx)))
  
  (define (check-symbols stx)
    (let ((symbols (syntax->list stx)))
      (and (andmap identifier? symbols)
           (not (check-duplicate-identifier symbols)))))
  
  ) ; end of module check-syntax