#lang racket (require rackunit) #; (case* [ ] .... [else ]) (define-syntax case* (syntax-rules (else cat) [(case* [ ] [ ] ... [else ]) (let ([val1 ]) (if (equal? val1 ) (case* val1 [ ] ... [else ])))] [(case* [else ]) (begin )])) (check-equal? (case* (begin (displayln "hello") (+ 1 2)) [else 'three]) 'three) (check-equal? (case* (+ 1 2) [4 'four] [else 'three]) 'three) (check-equal? (case* (+ 1 2) [(- 4 1) 'four] [else 'three]) 'four) (check-equal? (case* (begin (displayln "hi") (+ 1 3)) [(- 4 1) 'four] [5 'five] [else 'three]) 'three)