Fixed a bug with the rest case input of '(x + 3 * (x + y + 2))
authorRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Sun, 5 Sep 2010 17:08:04 +0000 (22:38 +0530)
committerRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Sun, 5 Sep 2010 17:08:04 +0000 (22:38 +0530)
src/sicp/ex2_58b.clj

index 9d2ffc9a29a5f70c9ef821f7fe69bbe71abad1bf..97400032ae23122be89bdc083de24bb10c5ece1c 100644 (file)
   (and (list? x) (= (op-expr x) '+)))
 
 (defn addend [s]
-  (first-expr s))
+  (let [a (first-expr s)]
+    (if (and (list? a)
+             (= (count a) 1))
+      (first a)
+      a)))
 
 (defn augend [s]
-  (rest-expr s))
+  (let [a (rest-expr s)]
+    (if (and (list? a)
+             (= (count a) 1))
+      (first a)
+      a)))
 
 (defn product? [x]
   (= (second x) '*))
 
 (defn multiplier [p]
-  (first p))
+  (let [m (first p)]
+    (if (and (list? m)
+             (= (count m) 1))
+      (first m)
+      m)))
 
 (defn multiplicand [p]
-  (rest (rest p)))
+  (let [m (rest (rest p))]
+    (if (and (list? m)
+             (= (count m) 1))
+      (first m)
+      m)))
 
 (defn make-exponentiation [b n]
   (cond (=number? b 1) 1