Clojure 1.10.1 user=> (def car 'ford) #'user/car user=> (def ford 3) #'user/ford user=> car ford user=> 'car car user=> (quote car) car user=> (eval (quote car)) ford user=> (eval car) 3 user=> (load-file "Documents/cs378/cs378.clj") #'user/kwote user=> (def x (list 'a 'b 'c)) #'user/x user=> x (a b c) user=> (empty? x) false user=> (cons? x) true user=> x (a b c) user=> (def y (cons 'd x)) #'user/y user=> x (a b c) user=> y (d a b c) user=> (load-file "Documents/cs378/trace.clj") #'user/deftrace user=> (deftrace factorial [n] (if (<= n 0) 1 (* n (factorial (- n 1))) ) ) #'user/factorial user=> (factorial 5) TRACE t251: (factorial 5) TRACE t252: | (factorial 4) TRACE t253: | | (factorial 3) TRACE t254: | | | (factorial 2) TRACE t255: | | | | (factorial 1) TRACE t256: | | | | | (factorial 0) TRACE t256: | | | | | => 1 TRACE t255: | | | | => 1 TRACE t254: | | | => 2 TRACE t253: | | => 6 TRACE t252: | => 24 TRACE t251: => 120 120 user=> (defn factorial [n] (if (<= n 0) 1 (* n (factorial (- n 1))) ) ) #'user/factorial user=> (factorial 10) 3628800 user=> (def saying '((a stitch in time) (saves nine))) #'user/saying user=> saying ((a stitch in time) (saves nine)) user=> (first saying) (a stitch in time) user=> (second saying) (saves nine) user=> (rest saying) ((saves nine)) user=> (second (second saying)) nine user=> (def pattern '((- (- ?x ?y)) (- ?y ?x)) ) #'user/pattern user=> pattern ((- (- ?x ?y)) (- ?y ?x)) user=> (deftrace length [lst] (if (empty? lst) 0 (+ 1 (length (rest lst))) ) ) #'user/length user=> (length '(a b c d)) TRACE t277: (length (a b c d)) TRACE t278: | (length (b c d)) TRACE t279: | | (length (c d)) TRACE t280: | | | (length (d)) TRACE t281: | | | | (length ()) TRACE t281: | | | | => 0 TRACE t280: | | | => 1 TRACE t279: | | => 2 TRACE t278: | => 3 TRACE t277: => 4 4 user=> (length '((a b) (c d))) TRACE t284: (length ((a b) (c d))) TRACE t285: | (length ((c d))) TRACE t286: | | (length ()) TRACE t286: | | => 0 TRACE t285: | => 1 TRACE t284: => 2 2 user=> (defn sum [lst] (if (empty? lst) 0 (+ (first lst) (sum (rest lst))) ) ) #'user/sum user=> (sum '(1 3 27 4)) 35 #'user/sumsq user=> (defn sumsq [lst] (if (empty? lst) 0 (+ (* (first lst) (first lst))(sumsq (rest lst))) ) ) #'user/sumsq user=> (sumsq '(1 3 27 4)) 755