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