]> git.rkrishnan.org Git - sicp.git/commitdiff
adding the "sets as trees" section code
authorRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Sun, 12 Sep 2010 06:15:09 +0000 (11:45 +0530)
committerRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Sun, 12 Sep 2010 06:15:09 +0000 (11:45 +0530)
src/sicp/ch2_3.clj

index 548d3aa1cf6f909465dc8537a7a4f4d1cb5a2625..a69973c95cfd54d55745294c714f8d1db412d4cf 100644 (file)
                                                  (rest set2)))
             (< x1 x2) (intersection-set (rest set1) set2)
             (< x2 x1) (intersection-set (rest set2) set1)))))
+
+;;; sets as trees
+;;; trees using lists
+;;;  every node is a list of 3 elements: entry, left tree and right tree
+(defn entry [tree]
+  (first tree))
+
+(defn left-branch [tree]
+  (second tree))
+
+(defn right-branch [tree]
+  (second (rest tree)))
+
+(defn make-tree [entry left right]
+  (list entry left right))
+
+(defn element-of-set? [x set]
+  (cond (empty? set) false
+        (= (entry set) x) true
+        (< x (entry set)) (element-of-set? x (left-branch set))
+        (> x (entry set)) (element-of-set? x (right-branch set))))
+
+(defn adjoin-set [x set]
+  (cond (empty? set) (make-tree x '() '())
+        (= x (entry set)) set
+        (< x (entry set)) (make-tree (entry set)
+                                     (adjoin-set x (left-branch set))
+                                     (right-branch set))
+        (> x (entry set)) (make-tree (entry set)
+                                     (left-branch set)
+                                     (adjoin-set x (right-branch set)))))
+