#lang racket/load (require "utils.rkt") (define (sum-odd-squares tree) (cond ((null? tree) 0) ((not (pair? tree)) (if (odd? tree) (square tree) 0)) (else (+ (sum-odd-squares (car tree)) (sum-odd-squares (cdr tree)))))) (define (even-fibs n) (define (next k) (if (> k n) '() (let ((f (fib k))) (if (even? f) (cons f (next (+ k 1))) (next (+ k 1)))))) (next 0)) (define (filter pred? coll) (cond ((empty? coll) '()) ((pred? (car coll)) (cons (car coll) (filter pred? (cdr coll)))) (else (filter pred? (cdr coll))))) (define (accumulate op initial coll) (if (null? coll) initial (op (car coll) (accumulate op initial (cdr coll))))) (define (enumerate-tree tree) (cond ((null? tree) '()) ((not (pair? tree)) (list tree)) (else (append (enumerate-tree (car tree)) (enumerate-tree (cdr tree)))))) (define (sum-odd-squares tree) (accumulate + 0 (map square (filter odd? (enumerate-tree tree))))) (define (even-fibs n) (accumulate cons '() (filter even? (map fib (range 0 n))))) (define (list-fib-squares n) (accumulate cons '() (map square (map fib (range 0 n))))) (define (product-of-squares-of-odd-elements coll) (accumulate * 1 (map square (filter odd? coll))))