Your macro does not consider the else case. My initial one also did not: (define-syntax CaseMetta (syntax-rules () ((_ var ((a1 b1))) (case var ((a1) b1))) ((_ var ((a1 b1) ...)) (case var ((a1) b1) ...)))) The complexity growth came from me trying to address the else case! :)