]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ex2_33.clj
Merge branch 'master' of github.com:vu3rdd/sicp
[sicp.git] / src / sicp / ex2_33.clj
1 (ns sicp.ex2_33
2   (:use [clojure.test]
3         [sicp.ch2-2 :only (accumulate)]))
4
5 ;; Fill in the missing expressions to complete the
6 ;; following definitions of some basic list-manipulation
7 ;; operations as accumulations:
8
9 ;; (define (map p sequence)
10 ;;   (accumulate (lambda (x y) <??>) nil sequence))
11 (defn mymap [p sequence]
12   (accumulate (fn [x y] (cons (p x) y)) nil sequence))
13
14 (deftest test-mymap
15   (is [= (mymap #(* % %) '(1 2 3))
16          '(1 4 9)]))
17
18 ;; (define (append seq1 seq2)
19 ;;   (accumulate cons <??> <??>))
20 (defn append [seq1 seq2]
21   (accumulate cons seq2 seq1))
22
23 (deftest test-append
24   (is [= (append '(1 2 3) '(4 5 6))
25          '(1 2 3 4 5 6)]))
26
27 ;; (define (length sequence)
28 ;;   (accumulate <??> 0 sequence))
29 (defn length [sequence]
30   (accumulate (fn [x y] (inc y)) 0 sequence))
31
32 (deftest test-length
33   (are [x y] [= x y]
34        (length '(1 2 3 4 5)) 5
35        (length '((1 2) 3 4 5) 4)))
36