Blob


1 (define (sum-odd-squares tree)
2 (cond ((null? tree) 0)
3 ((not (pair? tree))
4 (if (odd? tree) (square tree) 0))
5 (else (+ (sum-odd-squares (car tree))
6 (sum-odd-squares (cdr tree))))))
8 (define (even-fibs n)
9 (define (next k)
10 (if (> k n)
11 '()
12 (let ((f (fib k)))
13 (if (even? f)
14 (cons f (next (1+ k)))
15 (next (1+ k))))))
16 (next 0))
18 (map square (list 1 2 3 4 5))
20 (define (filter predicate sequence)
21 (cond ((null? sequence) '())
22 ((predicate (car sequence))
23 (cons (car sequence)
24 (filter predicate (cdr sequence))))
25 (else (filter predicate (cdr sequence)))))
27 (filter odd? (list 1 2 3 4 5))
28 (define (accumulate op initial sequence)
29 (if (null? sequence)
30 initial
31 (op (car sequence)
32 (accumulate op initial (cdr sequence)))))
33 (accumulate + 0 (list 1 2 3 4 5))
34 (accumulate * 1 (list 1 2 3 4 5))
35 (accumulate cons nil (list 1 2 3 4 5))
37 (define (enumerate-interval low high)
38 (if (low > high)
39 '()
40 (cons low (enumerate-interval (1+ low) high))))
41 (define (enumerate-tree tree)
42 (cond ((null? tree) '())
43 ((not (pair? tree)) (list tree))
44 (else (append (enumerate-tree (car tree))
45 (enumerate-tree (cdr tree))))))
46 (enumerate-tree (list 1 (list 2 (list 3 4)) 5))
48 (define (sum-odd-squares tree)
49 (accumulate +
50 0
51 (map square
52 (filter odd?
53 (enumerate-tree tree)))))
54 (define (even-fibs n)
55 (accumulate cons
56 nil
57 (filter even?
58 (map fib
59 (enumerate-interval 0 n)))))