(import (chicken base)) (define-syntax CaseMetta (syntax-rules (else) ((_ key ((else result1 result2 ...))) (begin result1 result2 ...)) ((_ key ((atom result1 result2 ...))) (if (eqv? key atom) (begin result1 result2 ...))) ((_ key ((atom result1 result2 ...) clause clauses ...)) (if (eqv? key atom) (begin result1 result2 ...) (CaseMetta key (clause clauses ...)))))) (let ((x 1) (y 5)) (print (case x ((1) 2) ((3) 4) (else 999))) (print (case y ((1) 2) ((3) 4) (else 999))) (print (CaseMetta x ((1 2) (3 4) (else 999)))) (print (CaseMetta y ((1 2) (3 4) (else 999)))))