]> git.rkrishnan.org Git - sicp.git/commitdiff
text examples upto 2.2.3
authorRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Thu, 22 Jul 2010 19:51:50 +0000 (01:21 +0530)
committerRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Thu, 22 Jul 2010 19:51:50 +0000 (01:21 +0530)
src/sicp/ch2_2.clj

index 2fd2f9ea2ae109a893d2be87b0bfdc623110a3a5..e0107f588bee0249443ab988173dd35443c6dbdd 100644 (file)
@@ -1,4 +1,5 @@
-(ns sicp.ch2_2)
+(ns sicp.ch2_2
+  (:refer-clojure :exclude (map)))
 
 (cons 1
       (cons 2
   (cond (nil? coll)       0
        (not (seq? coll)) 1
        :else (+ (count-leaves (first coll))
-                (count-leaves (next coll)))))
\ No newline at end of file
+                (count-leaves (next coll)))))
+
+;; mapping over trees
+(defn scale-tree [tree factor]
+  (cond (nil? tree) nil
+       (not (seq? tree)) (* tree factor)
+       :else (cons (scale-tree (first tree) factor)
+                   (scale-tree (next tree) factor))))
+
+;; using map
+(defn scale-tree-with-map [tree factor]
+  (map (fn [sub-tree]
+        (if (seq? sub-tree)
+          (scale-tree-with-map sub-tree factor)
+          (* sub-tree factor)))
+       tree))
\ No newline at end of file