lisp_eval_should_be '(reduce only2+ 1)' '1' 'reduce with atom does not call f'
lisp_eval_should_be '(reduce only2+ '\''(1))' '1' 'reduce without enough in list does not call f'
lisp_eval_should_be '(reduce only2+ '\''(1 2))' '3' 'reduce with enough items calls f'
lisp_eval_should_be '`()' '()' 'quasiquote nil'
lisp_eval_should_be '`foo' '()' 'quasiquoting atom makes error'
lisp_eval_should_be '`(1)' '(1)' 'quasiquote single item list'
lisp_eval_should_be '`(foo (bar) baz)' '(foo (bar) baz)' 'quasiquote with list inside'
lisp_eval_should_be '`(foo (bar ,(+ 1 2)) baz)' '(foo (bar 3) baz)' 'quasiquote with unquote inside list'
lisp_eval_should_be '(let ((xs '\''(1 2))) `(foo ,@xs baz))' \
'(foo 1 2 baz)' 'quasiquote splicing unquote'
lisp_eval_should_be '(let ((xs '\''(1 2))) `(foo (bar ,@xs bletch) baz))' \
'(foo (bar 1 2 bletch) baz)' \
'quasiquote splicing unquote inside list'