> <\body> <\session|scheme|default> <\unfolded-io|Scheme] > (define one-through-four (list 1 2 3 4)) <|unfolded-io> (1 2 3 4) <\unfolded-io|Scheme] > (car one-through-four) <|unfolded-io> 1 <\unfolded-io|Scheme] > (cdr one-through-four) <|unfolded-io> (2 3 4) <\unfolded-io|Scheme] > (car (cdr one-through-four)) <|unfolded-io> 2 <\unfolded-io|Scheme] > (cons 10 one-through-four) <|unfolded-io> (10 1 2 3 4) <\unfolded-io|Scheme] > (cons 5 one-through-four) <|unfolded-io> (5 1 2 3 4) <\input|Scheme] > \; \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (list-ref items n) \ \ (if (= n 0) \ \ \ \ \ \ (car items) \ \ \ \ \ \ (list-ref (cdr items) (- n 1)))) <|unfolded-io> list-ref <\unfolded-io|Scheme] > (define squares (list 1 4 9 16 25)) <|unfolded-io> (1 4 9 16 25) <\unfolded-io|Scheme] > (list-ref squares 3) <|unfolded-io> 16 <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (length items) \ \ (if (null? items) \ \ \ \ \ \ 0 \ \ \ \ \ \ (+ 1 (length (cdr items))))) <|unfolded-io> length <\unfolded-io|Scheme] > (define odds (list 1 3 5 7)) <|unfolded-io> (1 3 5 7) <\unfolded-io|Scheme] > (length odds) <|unfolded-io> 4 <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (append squares odds) <|unfolded-io> (1 4 9 16 25 1 3 5 7) <\unfolded-io|Scheme] > (append odds squares) <|unfolded-io> (1 3 5 7 1 4 9 16 25) <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (scale-list items factor) \ \ (if (null? items) \ \ \ \ \ \ () \ \ \ \ \ \ (cons (* (car items) factor) \ \ \ \ \ \ \ \ \ \ \ \ (scale-list (cdr items) factor)))) <|unfolded-io> scale-list <\unfolded-io|Scheme] > (scale-list (list 1 2 3 4 5) 10) <|unfolded-io> (10 20 30 40 50) <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (map abs (list -10 2.5 -11.6 17)) <|unfolded-io> (10 2.5 11.6 17) <\unfolded-io|Scheme] > (map (lambda (x) (* x x)) \ \ \ \ \ (list 1 2 3 4)) <|unfolded-io> (1 4 9 16) <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (count-leaves x) \ \ (cond ((null? x) 0) \ \ \ \ \ \ \ \ \ ((not (pair? x)) 1) \ \ \ \ \ \ \ \ (else (+ (count-leaves (car x)) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (count-leaves (cdr x)))))) <|unfolded-io> count-leaves <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (define x (cons (list 1 2) (list 3 4))) <|unfolded-io> ((1 2) 3 4) <\unfolded-io|Scheme] > (length x) <|unfolded-io> 3 <\unfolded-io|Scheme] > (count-leaves x) <|unfolded-io> 4 <\unfolded-io|Scheme] > (list x x) <|unfolded-io> (((1 2) 3 4) ((1 2) 3 4)) <\unfolded-io|Scheme] > (length (list x x)) <|unfolded-io> 2 <\unfolded-io|Scheme] > (count-leaves (list x x)) <|unfolded-io> 8 <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (scale-tree tree factor) \ \ (cond ((null? tree) ()) \ \ \ \ \ \ \ \ ((not (pair? tree)) (* tree factor)) \ \ \ \ \ \ \ \ (else (cons (scale-tree (car tree) factor) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (scale-tree (cdr tree) factor))))) <|unfolded-io> scale-tree <\unfolded-io|Scheme] > (scale-tree (list 1 (list 2 (list 3 4) 5) (list 6 7)) \ \ \ \ \ \ \ \ \ \ \ \ 10) <|unfolded-io> (10 (20 (30 40) 50) (60 70)) <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (square x) (* x x)) <|unfolded-io> square <\unfolded-io|Scheme] > (map square (list 1 2 3 4 5)) <|unfolded-io> (1 4 9 16 25) <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (filter predicate sequence) \ \ (cond ((null? sequence) ()) \ \ \ \ \ \ \ \ ((predicate (car sequence)) \ \ \ \ \ \ \ \ \ (cons (car sequence) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (filter predicate (cdr sequence)))) \ \ \ \ \ \ \ \ (else (filter predicate (cdr sequence))))) <|unfolded-io> filter <\unfolded-io|Scheme] > (filter odd? (list 1 2 3 4 5)) <|unfolded-io> (1 3 5) <\input|Scheme] > \; \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (accumulate op initial sequence) \ \ (if (null? sequence) \ \ \ \ \ \ initial \ \ \ \ \ \ (op (car sequence) \ \ \ \ \ \ \ \ \ \ (accumulate op initial (cdr sequence))))) <|unfolded-io> accumulate <\unfolded-io|Scheme] > (accumulate + 0 (list 1 2 3 4 5)) <|unfolded-io> 15 <\unfolded-io|Scheme] > (accumulate * 1 (list 1 2 3 4 5)) <|unfolded-io> 120 <\unfolded-io|Scheme] > (accumulate cons () (list 1 2 3 4 5)) <|unfolded-io> (1 2 3 4 5) <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (enumerate-interval low high) \ \ (if (\ low high) \ \ \ \ \ \ () \ \ \ \ \ \ (cons low (enumerate-interval (+ low 1) high)))) <|unfolded-io> enumerate-interval <\unfolded-io|Scheme] > (enumerate-interval 2 7) <|unfolded-io> (2 3 4 5 6 7) <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (enumerate-tree tree) \ \ (cond ((null? tree) ()) \ \ \ \ \ \ \ \ ((not (pair? tree)) (list tree)) \ \ \ \ \ \ \ \ (else (append (enumerate-tree (car tree)) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (enumerate-tree (cdr tree)))))) <|unfolded-io> enumerate-tree <\unfolded-io|Scheme] > (enumerate-tree (list 1 (list 2 (list 3 4)) 5)) <|unfolded-io> (1 2 3 4 5) <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (square x) (* x x)) <|unfolded-io> square <\unfolded-io|Scheme] > (define (fib n) \ \ (cond ((= n 0) 0) \ \ \ \ \ \ \ \ ((= n 1) 1) \ \ \ \ \ \ \ \ (else (+ (fib (- n 1)) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (fib (- n 2)))))) <|unfolded-io> fib <\unfolded-io|Scheme] > (define (list-fib-squares n) \ \ (accumulate cons \ \ \ \ \ \ \ \ \ \ \ \ \ \ () \ \ \ \ \ \ \ \ \ \ \ \ \ \ (map square \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (map \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (enumerate-interval 0 n))))) <|unfolded-io> list-fib-squares <\unfolded-io|Scheme] > (list-fib-squares 10) <|unfolded-io> (0 1 1 4 9 25 64 169 441 1156 3025) <\unfolded-io|Scheme] > (define (product-of-squares-of-odd-elements sequence) \ \ (accumulate * \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1 \ \ \ \ \ \ \ \ \ \ \ \ \ \ (map \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (filter odd? sequence)))) <|unfolded-io> product-of-squares-of-odd-elements <\unfolded-io|Scheme] > (product-of-squares-of-odd-elements (list 1 2 3 4 5)) <|unfolded-io> 225 <\input|Scheme] > \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (square x) (* x x)) <|unfolded-io> square <\unfolded-io|Scheme] > (define (smallest-divisor n) \ \ (find-divisor n 2)) <|unfolded-io> smallest-divisor <\unfolded-io|Scheme] > (define (find-divisor n test-divisor) \ \ (cond ((\ (square test-divisor) n) n) \ \ \ \ \ \ \ \ ((divides? test-divisor n) test-divisor) \ \ \ \ \ \ \ \ (else (find-divisor n (+ test-divisor 1))))) <|unfolded-io> find-divisor <\unfolded-io|Scheme] > (define (divides? a b) \ \ (= (remainder b a) 0)) <|unfolded-io> divides? <\unfolded-io|Scheme] > (define (prime? n) \ \ (= n (smallest-divisor n))) <|unfolded-io> prime? <\input|Scheme] > \; \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (flatmap proc seq) \ \ (accumulate append () (map proc seq))) <|unfolded-io> flatmap <\unfolded-io|Scheme] > (define (prime-sum? pair) \ \ (prime? (+ (car pair) (cadr pair)))) <|unfolded-io> prime-sum? <\unfolded-io|Scheme] > (define (make-pair-sum pair) \ \ (list (car pair) (cadr pair) (+ (car pair) (cadr pair)))) <|unfolded-io> make-pair-sum <\unfolded-io|Scheme] > (define (prime-sum-pairs n) \ \ (map make-pair-sum \ \ \ \ \ \ \ (filter prime-sum? \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (flatmap \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (lambda (i) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (map (lambda (j) (list i j)) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (enumerate-interval 1 (- i 1)))) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (enumerate-interval 1 n))))) <|unfolded-io> prime-sum-pairs <\unfolded-io|Scheme] > (prime-sum-pairs 4) <|unfolded-io> ((2 1 3) (3 2 5) (4 1 5) (4 3 7)) <\input|Scheme] > \; \; <\session|scheme|default> <\unfolded-io|Scheme] > (define (remove item sequence) \ \ (filter (lambda (x) (not (= x item))) \ \ \ \ \ \ \ \ \ \ sequence)) <|unfolded-io> remove <\unfolded-io|Scheme] > (define (permutations s) \ \ (if (null? s) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ; empty set? \ \ \ \ \ \ (list ()) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ; sequence containing empty set \ \ \ \ \ \ (flatmap (lambda (x) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (map (lambda (p) (cons x p)) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (permutations (remove x s)))) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ s))) <|unfolded-io> permutations <\unfolded-io|Scheme] > (permutations (list 1 2 3)) <|unfolded-io> ((1 2 3) (1 3 2) (2 1 3) (2 3 1) (3 1 2) (3 2 1)) <\input|Scheme] > \; <\initial> <\collection> <\references> <\collection> > > > > > <\auxiliary> <\collection> <\associate|toc> |math-font-series||Representing Sequences> |.>>>>|> |math-font-series||Hierarchical Structures> |.>>>>|> |math-font-series||Sequences as Conventional Interfaces> |.>>>>|> |Sequence Operations |.>>>>|> > |Nested Mappings |.>>>>|> >