(define-syntax CaseMettaMatch (syntax-rules (else) ((_ var ((pat body) ...)) (case var ((pat) body) ...)))) (define-syntax CaseMettaNoMatch (syntax-rules () ((_ var ((p body1) ... (elsemaybe elsebody))) (if (eq? 'elsemaybe 'else) 'elsebody)))) (define-syntax CaseMetta (syntax-rules () ((_ var cases) (let ((z (CaseMettaMatch var cases))) (if (eq? (if #f 1) z) (CaseMettaNoMatch var cases) z))))) (display (CaseMetta 343 ((1 2) (3 4) (5 6) (else 42) ))) ;42 (display (CaseMetta 343 ((1 2) (3 4) (5 6) (asdasd 42) ))) ;unspecified (display (CaseMetta 3 ((1 2) (3 4) (5 6) (asdasd 42) ))) ;4