(define-syntax quasiquote
(syntax-rules (unquote unquote-splicing)
((_ ((unquote x) . xs)) (cons x (quasiquote xs)))
((_ ((unquote-splicing x) . xs)) (append x (quasiquote xs)))
((_ (unquote x)) x)
((_ (x . xs)) (cons (quasiquote x) (quasiquote xs)))
((_ x) (quote x))))