;; Testing regular quote (quote 7) ;=>7 '7 ;=>7 (quote (1 2 3)) ;=>(1 2 3) '(1 2 3) ;=>(1 2 3) (quote (1 2 (3 4))) ;=>(1 2 (3 4)) '(1 2 (3 4)) ;=>(1 2 (3 4)) ;; Testing simple quasiquote (quasiquote 7) ;=>7 `7 ;=>7 (quasiquote (1 2 3)) ;=>(1 2 3) `(1 2 3) ;=>(1 2 3) (quasiquote (1 2 (3 4))) ;=>(1 2 (3 4)) `(1 2 (3 4)) ;=>(1 2 (3 4)) ;; Testing unquote `~7 ;=>7 (def! a 8) ;=>8 `a ;=>a `~a ;=>8 `(1 a 3) ;=>(1 a 3) `(1 ~a 3) ;=>(1 8 3) (def! b '(1 "b" "d")) ;=>(1 "b" "d") `(1 b 3) ;=>(1 b 3) `(1 ~b 3) ;=>(1 (1 "b" "d") 3) ;;; TODO: fix this ;;;`[1 ~b 3] ;;;;=>[1 (1 "b" "d") 3] ;; Testing splice-unquote (def! c '(1 "b" "d")) ;=>(1 "b" "d") `(1 c 3) ;=>(1 c 3) `(1 ~@c 3) ;=>(1 1 "b" "d" 3) ;;; TODO: fix this ;;;`[1 ~@c 3] ;;;;=>[1 1 "b" "d" 3] ;; Testing symbol equality (= 'abc 'abc) ;=>true (= 'abc 'abcd) ;=>false (= 'abc "abc") ;=>false (= "abc" 'abc) ;=>false ;;;;; Test quine ;;; TODO: needs expect line length fix ;;;((fn* [q] (quasiquote ((unquote q) (quote (unquote q))))) (quote (fn* [q] (quasiquote ((unquote q) (quote (unquote q))))))) ;;;=>((fn* [q] (quasiquote ((unquote q) (quote (unquote q))))) (quote (fn* [q] (quasiquote ((unquote q) (quote (unquote q)))))))