]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ex2_54.clj
an important bug fixed on equal? function
[sicp.git] / src / sicp / ex2_54.clj
1 (ns sicp.ex2_54
2   (:use [clojure.test]))
3
4 (defn atom? [x]
5   (not (list? x)))
6
7 (defn eq? [x y]
8   (if (not (atom? x))
9     false
10     (= x y)))
11
12 (defn equal? [a b]
13   (cond (and (atom? a) (atom? b)) (eq? a b)
14         (and (not (atom? a)) (not (atom? b))) (and (empty? a) (empty? b)) 
15         (atom? (first a))
16         (if (eq? (first a) (first b))
17           (equal? (rest a) (rest b))
18           false)
19         :else (and (equal? (first a) (first b))
20                    (equal? (rest a) (rest b)))))
21
22 (deftest test-equality
23   (are [x y] [= x y]
24        (equal? '(1) '(1)) true
25        (equal? '(1) '(2)) false
26        (equal? '(1 2) '(1 2)) true
27        (equal? '(1 2 (3)) '(1 2 (3))) true
28        (equal? '(1 2 3) '(1 2 (3))) false))