From: Ramakrishnan Muthukrishnan Date: Mon, 21 Jun 2010 14:21:31 +0000 (+0530) Subject: added another solution and test for 2.20 X-Git-Url: https://git.rkrishnan.org/specifications/%5B/%5D%20/frontends/%22file://%22%22.?a=commitdiff_plain;h=623562d251028d8ffc0a5752de2a8b12a739e1bf;p=sicp.git added another solution and test for 2.20 --- diff --git a/src/sicp/ex2_20.clj b/src/sicp/ex2_20.clj index 24b5f5e..5823309 100644 --- a/src/sicp/ex2_20.clj +++ b/src/sicp/ex2_20.clj @@ -9,8 +9,27 @@ (odd? y))) xs))) +;; another implementation +(defn- calc-parity [pred xs result] + (if (empty? xs) + (reverse result) + (let [a (first xs) + t (pred a)] + (if t + (calc-parity pred (rest xs) (cons a result)) + (calc-parity pred (rest xs) result))))) + +(defn same-parity-2 [x & xs] + (if (even? x) + (cons x (calc-parity even? xs '())) + (cons x (calc-parity odd? xs '())))) + (deftest test-same-parity (are [x y] [= x y] (same-parity 1 2 3 4 5 6 7) (list 1 3 5 7) (same-parity 2 3 4 5 6 7) (list 2 4 6))) +(deftest test-same-parity-2 + (are [x y] [= x y] + (same-parity-2 1 2 3 4 5 6 7) (list 1 3 5 7) + (same-parity-2 2 3 4 5 6 7) (list 2 4 6)))