Contents of the on-line supplement to Scheme and the art of
programming
Chapter 2:
- Exercise 2.3 (page 39): firsts-of-both
- Program 2.1 (page 44): singleton-list?
- Program 2.2 (page 47): last-item
- Program 2.3 (page 50): member?
- Program 2.4 (page 52): remove-1st
- Program 2.5 (page 62): remove-1st-trace
- Program 2.6 (page 62): entering
- Program 2.7 (page 62): leaving
- Program 2.8 (page 66): swapper
- Exercise 2.24 (page 70): describe
Chapter 3:
- Program 3.1 (page 75): add1
- Program 3.2 (page 75): sub1
- Program 3.4 (page 77): harmonic-sum
- Program 3.5 (page 78): list-of-zeros
- Program 3.6 (page 79): length
- Program 3.7 (page 81): list-ref
- Program 3.8 (page 85): rzero?
- Program 3.9 (page 86): r+
- Program 3.10 (page 86): r*
- Program 3.11 (page 86): r-
- Program 3.12 (page 87): rinvert
- Program 3.13 (page 87): r/
- Program 3.14 (page 87): r=
- Program 3.15 (page 87): rpositive?
- Program 3.16 (page 88): r>
- Program 3.17 (page 88): max
- Program 3.18 (page 88): rmax
- Program 3.19 (page 89): extreme-value
- Program 3.20 (page 90): rprint
- Program 3.21 (page 91): numr, denr, make-ratl
- Exercise 3.15 (page 92): rpositive?
Chapter 4:
- Program 4.1 (page 96): append
- Program 4.2 (page 97): reverse
- Program 4.3 (page 98): merge
- Program 4.4 (page 98): even?
- Program 4.5 (page 99): odd?
- Program 4.6 (page 100): remove
- Program 4.7 (page 102): count-all
- Program 4.8 (page 105): remove-all
- Program 4.9 (page 105): remq-all
- Program 4.10 (page 107): reverse-all
- Program 4.13 (page 110): depth
- Program 4.14 (page 111): flatten
- Program 4.15 (page 113): remove-left-most
- Program 4.16 (page 113): member-all?
- Program 4.17 (page 114): remove-left-most
- Program 4.18 (page 116): fact
- Program 4.19 (page 118): fact-it
- Program 4.20 (page 121): fib
- Program 4.24 (page 124): fib-it
- Program 4.25 (page 127): reverse-it
Chapter 5:
- Program 5.3 (page 137): remove-leftmost
- Program 5.4 (page 139): fact
- Program 5.5 (page 139): swapper
- Exercise 5.5 (page 141): mystery
- Program 5.6 (page 144): zero-poly?
- Program 5.7 (page 145): make-term
- Program 5.8 (page 145): leading-term
- Program 5.9 (page 146): p+
- Program 5.10 (page 148): p*
- Program 5.11 (page 148): negative-poly
- Program 5.12 (page 148): p-
- Program 5.13 (page 150): poly-value
- Program 5.14 (page 151): the-zero-poly, degree, leading-coef,
rest-of-poly, poly-cons
- Program 5.15 (page 153): the-zero-poly, degree, leading-coef,
rest-of-poly, poly-cons
- Program 5.16 (page 157): digits->poly
- Program 5.17 (page 157): binary->decimal
- Program 5.18 (page 158): poly->digits
- Program 5.20 (page 160): decimal->binary
Chapter 6:
- Program 6.1 (page 165): string-insert
- Exercise 6.4 (page 167): mystery
- Program 6.2 (page 169): square-root
- Program 6.3 (page 171): square-root-display
- Program 6.5 (page 172): round-n-places
- Program 6.6 (page 174): read-demo
- Program 6.7 (page 175): interactive-square-root
- Program 6.9 (page 181): tower-of-hanoi
- Program 6.10 (page 182): display-tower-of-hanoi
- Program 6.12 (page 184): legal?, solution?, fresh-try
- Program 6.13 (page 185): build-solution
- Program 6.14 (page 186): forward
- Program 6.15 (page 186): backtrack
- Program 6.16 (page 188): searcher
- Exercise 6.16 (page 191): blanks
Chapter 7:
- Program 7.1 (page 196): map
- Program 7.2 (page 197): for-each
- Program 7.3 (page 198): add
- Program 7.4 (page 199): list
- Program 7.5 (page 199): writeln
- Program 7.6 (page 199): error
- Program 7.7 (page 200): add
- Program 7.8 (page 201): compose
- Program 7.9 (page 203): plus
- Program 7.10 (page 203): times
- Program 7.11 (page 203): exponent
- Program 7.12 (page 203): super
- Program 7.13 (page 204): superduper
- Program 7.14 (page 204): super-order
- Program 7.15 (page 205): ackermann
- Exercise 7.5 (page 206): iota, mystery
- Exercise 7.8 (page 208): andmap
- Exercise 7.10 (page 209): ormap
- Program 7.16 (page 212): member?-c
- Program 7.17 (page 213): apply-to-all
- Program 7.18 (page 213): sum
- Program 7.19 (page 213): product
- Program 7.20 (page 214): swapper-m
- Exercise 7.14 (page 215): round-5-places
- Exercise 7.19 (page 216): andmap-c, all-positive?, ormap,
some-positive?
- Exercise 7.20 (page 217): divides-by
- Program 7.23 (page 221): flat-recur
- Program 7.24 (page 222): filter-in-c
- Program 7.25 (page 225): filter-in-all-c
- Program 7.26 (page 225): filter-in-all
- Program 7.27 (page 225): sum-all
- Program 7.28 (page 227): deep-recur
Chapter 8:
- Program 8.1 (page 232): both
- Program 8.2 (page 232): neither
- Program 8.3 (page 233): at-least-one
- Program 8.4 (page 237): make-set
- Program 8.5 (page 238): none
- Program 8.6 (page 238): there-exists
- Program 8.7 (page 239): for-all
- Program 8.8 (page 240): set-equal
- Program 8.9 (page 241): element
- Program 8.10 (page 241): contains
- Program 8.11 (page 242): superset
- Program 8.12 (page 242): subset
- Program 8.13 (page 242): cardinal
- Program 8.14 (page 243): intersection
- Program 8.15 (page 244): union
- Program 8.16 (page 244): difference
- Program 8.17 (page 245): set-builder
- Program 8.19 (page 246): family-union
- Program 8.20 (page 246): family-intersection
- Program 8.21 (page 247): set-map
- Program 8.22 (page 247): list->set
- Program 8.23 (page 248): set->list
- Exercise 8.5 (page 248): for-one
- Exercise 8.6 (page 249): superset
- Program 8.24 (page 250): the-empty-set, empty-set?, set?, pick
- Program 8.25 (page 251): adjoin, residue
- Program 8.26 (page 252): adjoin, residue
- Exercise 8.7 (page 253): pick
- Program 8.27 (page 256): make-op, op?, op-1st, op-2nd
- Program 8.28 (page 257): make-op, op?, op-1st, op-2nd
- Program 8.29 (page 257): make-op, op?, op-1st, op-2nd
- Program 8.30 (page 258): cartesian-product
- Program 8.31 (page 259): domain, range
- Program 8.32 (page 260): subrelation/1st
- Program 8.33 (page 260): function?
- Program 8.34 (page 261): value
Chapter 9:
- Program 9.1 (page 269): view
- Program 9.2 (page 270): make-vector
- Program 9.3 (page 271): list->vector
- Program 9.4 (page 271): vector
- Program 9.5 (page 272): vector-stretch
- Program 9.6 (page 272): vector-copy
- Program 9.7 (page 272): vector-update
- Program 9.8 (page 273): list->vector
- Program 9.9 (page 273): vector-map
- Program 9.10 (page 274): multiply-by-scalar
- Program 9.11 (page 274): vector-apply-elementwise-to-both
- Program 9.12 (page 275): vec+, vec*
- Program 9.13 (page 275): vector-sum
- Program 9.14 (page 276): vector-product
- Program 9.15 (page 277): vector-accumulate
- Program 9.16 (page 277): vector->list
- Program 9.17 (page 279): dot-product
- Program 9.18 (page 279): vector?, vector-length
- Program 9.19 (page 280): vector-ref, vector-generator
- Program 9.20 (page 280): vector-ref, vector-generator
- Program 9.21 (page 283): vector-generator
- Program 9.22 (page 283): vector-update!
- Program 9.23 (page 284): list->vector
- Program 9.24 (page 286): vector-reverse
- Program 9.25 (page 286): swap-maker
- Program 9.26 (page 287): vector-reverse!
- Program 9.27 (page 288): swap-maker
- Program 9.30 (page 293): num-cols
- Program 9.31 (page 294): num-rows
- Program 9.32 (page 294): matrix-ref
- Program 9.33 (page 295): matrix-generator
- Program 9.34 (page 296): row-of
- Program 9.35 (page 296): column-of
- Program 9.37 (page 297): matrix-transpose
- Program 9.38 (page 299): matrix-product
- Program 9.39 (page 300): matrix-set!
Chapter 10:
- Program 10.1 (page 304): insertsort
- Program 10.2 (page 304): insert
- Program 10.5 (page 306): vector-insertsort!
- Program 10.6 (page 307): vector-insert!
- Program 10.7 (page 310): make-groups
- Program 10.8 (page 311): pair-merge
- Program 10.9 (page 311): nat-mergesort
- Program 10.10 (page 313): vector-merge!
- Program 10.11 (page 314): vector-mergesort!
- Program 10.12 (page 315): vector-change!
- Program 10.13 (page 317): quicksort
- Program 10.14 (page 320): vector-quicksort!
- Program 10.15 (page 321): partition
- Program 10.16 (page 321): vector-swap!
- Program 10.18 (page 324): random-list
- Program 10.19 (page 325): timer
- Program 10.22 (page 331): binary-search
- Program 10.23 (page 333): unlist
- Program 10.25 (page 337): find-supervisor
- Program 10.26 (page 338): closest-common-supervisor
Chapter 11:
- Program 11.1 (page 344): stk, empty?, top, print-stack, push!,
pop!
- Program 11.2 (page 346): lookup
- Program 11.3 (page 347): assoc
- Program 11.4 (page 347): memoize
- Program 11.5 (page 348): memo-fib
- Program 11.6 (page 350): vector-memoize
- Program 11.7 (page 352): member?
- Program 11.8 (page 353): while-proc
- Program 11.9 (page 355): swapper
- Program 11.11 (page 359): mystery
- Program 11.21 (page 368): last-pair
- Program 11.22 (page 368): append!
- Exercise 11.14 (page 371): mystery
- Exercise 11.16 (page 371): efface, test-efface
- Exercise 11.17 (page 372): test-efface2, test-efface3
- Exercise 11.18 (page 372): smudge, shift-down, test-smudge
- Exercise 11.19 (page 373): *seen-pairs*, count-pairs, dont-count?,
test-count-pairs, count-pairs
- Exercise 11.20 (page 375): reconfigure, at, overwrite, right,
check-null, test-reconfigure
- Exercise 11.22 (page 378): shifter, overwrite
- Exercise 11.23 (page 379): busy-beaver, endless-growth,
perpetual-motion, pendulum
- Exercise 11.24 (page 380): busy-beaver-lines, run-lines
- Exercise 11.26 (page 382): overwrite, right
Chapter 12:
- Program 12.1 (page 386): for-effect-only
- Program 12.2 (page 388): box-maker
- Program 12.3 (page 388): delegate
- Program 12.4 (page 389): base-object
- Program 12.5 (page 389): send
- Program 12.6 (page 390): box-maker
- Program 12.7 (page 391): counter-maker
- Program 12.8 (page 392): counter-maker
- Program 12.9 (page 393): accumulator-maker
- Program 12.10 (page 394): gauge-maker
- Program 12.12 (page 398): stack-maker
- Program 12.13 (page 400): queue-maker
- Program 12.15 (page 402): queue-maker
- Program 12.18 (page 406): circular-list-maker
- Program 12.19 (page 407): stack-maker
- Program 12.20 (page 408): queue-maker
- Exercise 12.21 (page 411): memoize
- Program 12.23 (page 412): bucket-maker
- Program 12.24 (page 412): memoize
- Program 12.25 (page 414): hash-table-maker
- Program 12.26 (page 415): memoize
- Exercise 12.29 (page 418): theater-maker
- Exercise 12.30 (page 418): theater-maker
- Program 12.27 (page 419): combine
- Exercise 12.30 (page 418): theater-maker
- Exercise 12.32 (page 420): theater-maker
- Program 12.28 (page 421): send
- Exercise 12.33 (page 421): counter-maker
- Exercise 12.34 (page 422): cartesian-point-maker
- Exercise 12.35 (page 423): manhattan-point-maker
- Exercise 12.36 (page 423): cartesian-origin-maker
Chapter 13:
- Program 13.1 (page 426): unif-rand-var-0-1
- Program 13.2 (page 427): exponential-random-variable
- Program 13.3 (page 427): arrival-time-generator
- Program 13.4 (page 428): normal-random-variable
- Program 13.5 (page 428): gallons-generator
- Exercise 13.3 (page 429): random-maker, random-time, random
- Program 13.8 (page 434): simulation-setup&run
- Program 13.9 (page 435): simulation
- Program 13.10 (page 436): station-maker
- Program 13.11 (page 437): pump-maker
- Program 13.12 (page 438): customer-maker
- Program 13.13 (page 439): service-maker
- Program 13.14 (page 439): report
- Program 13.15 (page 440): prompt-read
- Program 13.16 (page 441): gas-station-simulator
- Exercise 13.9 (page 444): prompt-read
Chapter 14:
- Program 14.1 (page 453): freeze
- Program 14.2 (page 356): freeze
- Program 14.3 (page 456): thaw
- Program 14.4 (page 457): make-promise
- Program 14.5 (page 458): delay
- Program 14.6 (page 458): delay-transformer, delay
- Program 14.7 (page 459): let
- Program 14.8 (page 460): let-transformer, let
- Program 14.9 (page 461): letrec
- Program 14.10 (page 462): letrec
- Program 14.11 (page 463): cycle-proc
- Program 14.12 (page 464): or-proc
- Program 14.13 (page 465): or-transformer, or
- Program 14.14 (page 465): or
- Exercise 14.3 (page 466): or
- Exercise 14.12 (page 470): vector-sum
- Exercise 14.16 (page 472): member-trace, factorial
Chapter 15:
- Program 15.1 (page 477): delayed-list-car
- Program 15.2 (page 478): delayed-list-cdr
- Program 15.3 (page 478): the-null-delayed-list
- Program 15.4 (page 479): random-delayed-list
- Program 15.5 (page 483): stream-car, stream-cdr
- Program 15.6 (page 483): random-stream-generator
- Program 15.7 (page 483): random-stream
- Program 15.8 (page 484): the-null-stream
- Program 15.9 (page 484): list->stream
- Program 15.10 (page 484): end-of-stream?
- Program 15.11 (page 485): stream-null?
- Program 15.12 (page 485): stream->list, finite-stream->list
- Program 15.13 (page 486): positive-integers
- Program 15.14 (page 486): even-positive-integers
- Program 15.15 (page 486): powers-of-2
- Program 15.16 (page 487): build-stream
- Program 15.17 (page 488): factorials
- Program 15.18 (page 488): stream-map
- Program 15.19 (page 489): odd-positive-integers
- Program 15.20 (page 489): stream-apply-to-both
- Program 15.21 (page 489): stream-plus, stream-times
- Program 15.22 (page 490): stream-filter-out
- Program 15.23 (page 490): positive-integers
- Program 15.24 (page 491): factorials
- Program 15.25 (page 491): fibonacci-numbers
- Program 15.26 (page 492): sieve
- Program 15.27 (page 492): prime-numbers
- Exercise 15.14 (page 495): stream-append, int-pairs-generator,
stream-append/delay
- Exercise 15.17 (page 499): string-tester
- Program 15.29 (page 504): file-copier
- Program 15.30 (page 505): file->stream
- Program 15.31 (page 506): formatter
- Program 15.32 (page 506): remove-newlines
- Program 15.33 (page 506): remove-extra-spaces
- Program 15.34 (page 507): trim-spaces
- Program 15.35 (page 507): insert-double-spaces
- Program 15.36 (page 507): end-of-sentence?
- Program 15.37 (page 508): insert-newlines
- Program 15.38 (page 508): count-chars-to-next-space
- Program 15.39 (page 509): stream->file
- Exercise 15.28 (page 510): formatter
- Exercise 15.29 (page 511): formatter
- Exercise 15.30 (page 511): apply-procedures
- Exercise 15.31 (page 511): formatter
Chapter 16:
- Exercise 16.6 (page 526): reset
- Program 16.1 (page 527): call/cc
- Program 16.2 (page 530): receiver-1, receiver-2, receiver-3
- Program 16.3 (page 531): result, resultcc
- Program 16.4 (page 531): writeln/return, answer-maker, call
- Exercise 16.16 (page 537): deep, map-sub1
- Program 16.5 (page 538): *escape/thunk*, escaper
- Program 16.6 (page 539): receiver-4
- Program 16.7 (page 540): escaper
- Exercise 16.22 (page 541): new-escaper
- Program 16.8 (page 542): how-many-til
- Program 16.9 (page 543): how-many-til
- Program 16.10 (page 543): random-data
- Program 16.11 (page 544): product+
- Program 16.12 (page 545): product+
- Program 16.13 (page 546): product+
- Program 16.14 (page 546): product+
- Program 16.15 (page 547): product+
- Program 16.16 (page 547): and-count-maker
- Program 16.17 (page 548): product+
Chapter 17:
- Program 17.1 (page 553): countdown
- Program 17.2 (page 554): message
- Program 17.3 (page 554): attempt
- Program 17.4 (page 555): attempt
- Program 17.5 (page 557): receiver
- Program 17.6 (page 557): tester
- Program 17.7 (page 560): flatten-number-list
- Program 17.8 (page 560): break
- Program 17.9 (page 560): break
- Program 17.10 (page 561): get-back, break
- Program 17.11 (page 561): any-action
- Program 17.12 (page 561): any-action
- Program 17.13 (page 562): get-back, break
- Program 17.14 (page 563): break-argument, any-action
- Program 17.15 (page 564): get-back, break
- Program 17.16 (page 564): flatten-number-list
- Program 17.17 (page 564): extract
- Program 17.18 (page 565): store
- Exercise 17.4 (page 565): flatten-number-list
- Exercise 17.6 (page 565): product+
- Program 17.19 (page 569): A, B, C
- Program 17.20 (page 570): coroutine-maker
- Program 17.21 (page 570): resume-maker
- Exercise 17.12 (page 571): ping, pong
- Program 17.22 (page 573): reader
- Program 17.23 (page 574): writer
- Program 17.24 (page 574): x->y
- Program 17.25 (page 575): grune
- Exercise 17.16 (page 576): grune
- Exercise 17.17 (page 577): process-maker
This document is available on the World Wide Web as
http://www.cs.grinnell.edu/~stone/courses/scheme/sap/contents.xhtml
created February 3, 2000
last revised February 3, 2000
John David Stone
(stone@cs.grinnell.edu)