Structure and Interpretation of Computer Programs (112 page)

Read Structure and Interpretation of Computer Programs Online

Authors: Harold Abelson and Gerald Jay Sussman with Julie Sussman

BOOK: Structure and Interpretation of Computer Programs
10.94Mb size Format: txt, pdf, ePub

Sussman, Gerald Jay, and Guy Lewis Steele Jr. 1980. Constraints – A
language for expressing almost-hierachical descriptions.
AI
Journal
14:1-39.

Sussman, Gerald Jay, and Jack Wisdom. 1992. Chaotic evolution of the
solar system.
Science
257:256-262.

Sussman, Gerald Jay, Terry Winograd, and Eugene Charniak. 1971.
Microplanner reference manual. Memo 203A, MIT Artificial Intelligence
Laboratory.

Sutherland, Ivan E. 1963. SKETCHPAD: A man-machine graphical
communication system. Technical report 296, MIT Lincoln Laboratory.

Teitelman, Warren. 1974. Interlisp reference manual. Technical
report, Xerox Palo Alto Research Center.

Thatcher, James W., Eric G. Wagner, and Jesse B. Wright. 1978.
Data type specification: Parameterization and the power of
specification techniques. In
Conference Record of the Tenth Annual ACM
Symposium on Theory of Computing
, pp. 119-132.
Turner, David. 1981. The future of applicative languages. In
Proceedings of the 3rd European Conference on Informatics,
Lecture
Notes in Computer Science, volume 123. New York: Springer-Verlag, pp.
334-348.

Wand, Mitchell. 1980. Continuation-based program transformation
strategies.
Journal of the ACM
27(1):164-180.

Waters, Richard C. 1979. A method for analyzing loop programs.
IEEE Transactions on Software Engineering
5(3):237-247.

Winograd, Terry. 1971. Procedures as a representation for data in a
computer program for understanding natural language. Technical report
AI TR-17, MIT Artificial Intelligence Laboratory.

Winston, Patrick. 1992.
Artificial Intelligence
. 3rd edition.
Reading, MA: Addison-Wesley.

Zabih, Ramin, David McAllester, and David Chapman. 1987.
Non-deterministic Lisp with dependency-directed backtracking.
AAAI-87
, pp. 59-64.

Zippel, Richard. 1979. Probabilistic algorithms for sparse
polynomials. Ph.D. dissertation, Department of Electrical Engineering
and Computer Science, MIT.

Zippel, Richard. 1993.
Effective Polynomial Computation.
Boston, MA: Kluwer Academic Publishers.

 

List of Exercises

1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10
1.11
1.12
1.13
1.14
1.15
1.16
1.17
1.18
1.19
1.20
1.21
1.22
1.23
1.24
1.25
1.26
1.27
1.28
1.29
1.30
1.31
1.32
1.33
1.34
1.35
1.36
1.37
1.38
1.39
1.40
1.41
1.42
1.43
1.44
1.45
1.46
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
2.17
2.18
2.19
2.20
2.21
2.22
2.23
2.24
2.25
2.26
2.27
2.28
2.29
2.30
2.31
2.32
2.33
2.34
2.35
2.36
2.37
2.38
2.39
2.40
2.41
2.42
2.43
2.44
2.45
2.46
2.47
2.48
2.49
2.50
2.51
2.52
2.53
2.54
2.55
2.56
2.57
2.58
2.59
2.60
2.61
2.62
2.63
2.64
2.65
2.66
2.67
2.68
2.69
2.70
2.71
2.72
2.73
2.74
2.75
2.76
2.77
2.78
2.79
2.80
2.81
2.82
2.83
2.84
2.85
2.86
2.87
2.88
2.89
2.90
2.91
2.92
2.93
2.94
2.95
2.96
2.97
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
3.14
3.15
3.16
3.17
3.18
3.19
3.20
3.21
3.22
3.23
3.24
3.25
3.26
3.27
3.28
3.29
3.30
3.31
3.32
3.33
3.34
3.35
3.36
3.37
3.38
3.39
3.40
3.41
3.42
3.43
3.44
3.45
3.46
3.47
3.48
3.49
3.50
3.51
3.52
3.53
3.54
3.55
3.56
3.57
3.58
3.59
3.60
3.61
3.62
3.63
3.64
3.65
3.66
3.67
3.68
3.69
3.70
3.71
3.72
3.73
3.74
3.75
3.76
3.77
3.78
3.79
3.80
3.81
3.82
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12
4.13
4.14
4.15
4.16
4.17
4.18
4.19
4.20
4.21
4.22
4.23
4.24
4.25
4.26
4.27
4.28
4.29
4.30
4.31
4.32
4.33
4.34
4.35
4.36
4.37
4.38
4.39
4.40
4.41
4.42
4.43
4.44
4.45
4.46
4.47
4.48
4.49
4.50
4.51
4.52
4.53
4.54
4.55
4.56
4.57
4.58
4.59
4.60
4.61
4.62
4.63
4.64
4.65
4.66
4.67
4.68
4.69
4.70
4.71
4.72
4.73
4.74
4.75
4.76
4.77
4.78
4.79
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
5.24
5.25
5.26
5.27
5.28
5.29
5.30
5.31
5.32
5.33
5.34
5.35
5.36
5.37
5.38
5.39
5.40
5.41
5.42
5.43
5.44
5.45
5.46
5.47
5.48
5.49
5.50
5.51
5.52

 

Index

Any inaccuracies in this index may be explained by the fact that it
has been prepared with the help of a computer.

Donald E. Knuth,
Fundamental Algorithms
(Volume 1 of
The Art of Computer Programming
)

!
in names
"
(double quote)
λ calculus,
see
lambda calculus
⟼ notation for mathematical function
π ,
see
pi
Σ (sigma) notation
θ
,
see
theta
'
(single quote)
    
read
and
,
[2]
*
(primitive multiplication procedure)
+
(primitive addition procedure)
,
(comma, used with backquote)
-
(primitive subtraction procedure)
    
as negation
/
(primitive division procedure)
<
(primitive numeric comparison predicate)
=
(primitive numeric equality predicate)
=number?
=zero?
(generic)
    
for polynomials
>
(primitive numeric comparison predicate)
>=
,
[2]
?
, in predicate names
#f
#t
`
(backquote)
;
,
see
semicolon

Abelson, Harold
abs
,
[2]
,
[3]
absolute value
abstract data
,
see also
data abstraction
abstract models for data
abstract syntax
    
in metacircular evaluator
    
in query interpreter
abstraction,
see also
means of abstraction; data abstraction; higher-order procedures
    
common pattern and
    
metalinguistic
    
procedural
    
in register-machine design
    
of search in nondeterministic programming
abstraction barriers
,
[2]
,
[3]
    
in complex-number system
    
in generic arithmetic system
accelerated-sequence
accumulate
,
[2]
    
same as
fold-right
accumulate-n
accumulator
,
[2]
Áchárya, Bháscara
Ackermann's function
acquire a mutex
actions, in register machine
actual-value
Ada
    
recursive procedures
Adams, Norman I., IV
add
(generic)
    
used for polynomial coefficients
,
[2]
add-action!
,
[2]
add-binding-to-frame!
add-complex
add-complex-to-schemenum
add-interval
add-lists
add-poly
add-rat
add-rule-or-assertion!
add-streams
add-terms
add-to-agenda!
,
[2]
add-vect
addend
adder
    
full
    
half
    
ripple-carry
adder
(primitive constraint)
additivity
,
[2]
,
[3]
,
[4]
address
address arithmetic
Adelman, Leonard
adjoin-arg
adjoin-set
    
binary-tree representation
    
ordered-list representation
    
unordered-list representation
    
for weighted sets
adjoin-term
,
[2]
advance-pc
after-delay
,
[2]
agenda,
see
digital-circuit simulation
A'h-mose
algebra, symbolic,
see
symbolic algebra
algebraic expression
    
differentiating
    
representing
    
simplifying
algebraic specification for data
Algol
    
block structure
    
call-by-name argument passing
,
[2]
    
thunks
,
[2]
    
weakness in handling compound objects
algorithm
    
optimal
    
probabilistic
,
[2]
aliasing
all-regs
(compiler)
Allen, John
alternative of
if
always-true
amb
amb
evaluator,
see
nondeterministic evaluator
ambeval
an-element-of
an-integer-starting-from
analog computer
analyze
    
metacircular
    
nondeterministic
analyze-...
    
metacircular
,
[2]
    
nondeterministic
analyze-amb
analyzing evaluator
    
as basis for nondeterministic evaluator
    
let
and
(query language)
    
evaluation of
,
[2]
,
[3]
and
(special form)
    
evaluation of
    
why a special form
    
with no subexpressions
and-gate
    
and-gate
angle
    
data-directed
    
polar representation
    
rectangular representation
    
with tagged data
angle-polar
angle-rectangular
announce-output
APL
Appel, Andrew W.
append
,
[2]
,
[3]
    
as accumulation
    
append!
vs.
    
with arbitrary number of arguments
    
as register machine
    
“what is” (rules) vs. “how to” (procedure)
append!
    
as register machine
append-instruction-sequences
,
[2]
append-to-form
(rules)
application?
applicative-order evaluation
    
in Lisp
    
normal order vs.
,
[2]
,
[3]
apply
(lazy)
apply
(metacircular)
    
primitive
apply
vs.
apply
(primitive procedure)
apply-dispatch
    
modified for compiled code
apply-generic
    
with coercion
,
[2]
    
with coercion by raising
    
with coercion of multiple arguments
    
with coercion to simplify
    
with message passing
    
with tower of types
apply-primitive-procedure
,
[2]
,
[3]
apply-rules
arbiter
arctangent
argl
register
argument passing,
see
call-by-name argument passing; call-by-need argument passing
argument(s)
    
arbitrary number of
,
[2]
    
delayed
Aristotle's
De caelo
(Buridan's commentary on)
arithmetic
    
address arithmetic
    
generic
,
see also
generic arithmetic operations
    
on complex numbers
    
on intervals
    on polynomials,
see
polynomial arithmetic
    
on power series
,
[2]
    
on rational numbers
    
primitive procedures for
articles
ASCII code
assemble
,
[2]
assembler
,
[2]
assert!
(query interpreter)
assertion
    
implicit
assign
(in register machine)
    
simulating
    
storing label in register
assign-reg-name
assign-value-exp
assignment
,
see also
set!
    
benefits of
    
bugs associated with
,
[2]
    
costs of
assignment operator
,
see also
set!
assignment-value
assignment-variable
assignment?
assoc
atan
(primitive procedure)
atomic operations supported in hardware
atomic requirement for
test-and-set!
attach-tag
    
using Scheme data types
augend
automagically
automatic search
,
see also
search
    
history of
automatic storage allocation
average
average damping
average-damp
averager
(constraint)

B-tree
backquote
backtracking
,
see also
nondeterministic computing
Backus, John
Baker, Henry G., Jr.
balanced binary tree
,
see also
binary tree
balanced mobile
bank account
,
[2]
    
exchanging balances
    
joint
,
[2]
    
joint, modeled with streams
    
joint, with concurrent access
    
password-protected
    
serialized
    
stream model
    
transferring money
barrier synchronization
Barth, John
Basic
    
restrictions on compound data
    
weakness in handling compound objects
Batali, John Dean
begin
(special form)
    
implicit in consequent of
cond
and in procedure body
begin-actions
begin?
below
,
[2]
Bertrand's Hypothesis
beside
,
[2]
bignum
binary numbers, addition of,
see
adder
binary search
binary tree
    
balanced
    
converting a list to a
    
converting to a list
    
for Huffman encoding
    
represented with lists
    
sets represented as
    
table structured as
bind
binding
    
deep
binomial coefficients
black box
block structure
,
[2]
    
in environment model
    
in query language
blocked process
body of a procedure
Bolt Beranek and Newman Inc.
Borning, Alan
Borodin, Alan
bound variable
box-and-pointer notation
    
end-of-list marker
branch
(in register machine)
    
simulating
branch of a tree
branch-dest
breakpoint
broken heart
bug
    
capturing a free variable
    
order of assignments
    
side effect with aliasing
bureaucracy
Buridan, Jean
busy-waiting

C
    
compiling Scheme into
    
error handling
,
[2]
    
recursive procedures
    
restrictions on compound data
    
Scheme interpreter written in
,
[2]
ca
...
r
cache-coherence protocols
cadr
calculator, fixed points with
call-by-name argument passing
,
[2]
call-by-need argument passing
,
[2]
    
memoization and
call-each
cancer of the semicolon
canonical form, for polynomials
capturing a free variable
car
(primitive procedure)
    
axiom for
    
implemented with vectors
    
as list operation
    
origin of the name
    
procedural implementation of
,
[2]
,
[3]
,
[4]
,
[5]
Carmichael numbers
,
[2]
case analysis
    
data-directed programming vs.
    
general
,
see also
cond
    
with two cases (
if
)
cd
...
r
cdr
(primitive procedure)
    
axiom for
    
implemented with vectors
    
as list operation
    
origin of the name
    
procedural implementation of
,
[2]
,
[3]
,
[4]
,
[5]
cdr
down a list
cell, in serializer implementation
celsius-fahrenheit-converter
    
expression-oriented
center
Cesàro, Ernesto
cesaro-stream
cesaro-test
Chaitin, Gregory
Chandah-sutra
change and sameness
    
meaning of
    
shared data and
changing money,
see
counting change
chaos in the Solar System
Chapman, David
character strings
    
primitive procedures for
,
[2]
    
quotation of
character, ASCII encoding
Charniak, Eugene
Chebyshev, Pafnutii L'vovich
chess, eight-queens puzzle
,
[2]
chip implementation of Scheme
,
[2]
chronological backtracking
Chu Shih-chieh
Church numerals
Church, Alonzo
,
[2]
Church-Turing thesis
circuit
    digital,
see
digital-circuit simulation
    
modeled with streams
,
[2]
Clark, Keith L.
clause, of a
cond
    
additional syntax
Clinger, William
,
[2]
closed world assumption
closure
    
in abstract algebra
    
closure property of
cons
    
closure property of picture-language operations
,
[2]
    
lack of in many languages
coal, bituminous
code
    
ASCII
    
fixed-length
    Huffman,
see
Huffman code
    
Morse
    
prefix
    
variable-length
code generator
    
arguments of
    
value of
coeff
,
[2]
coercion
    
in algebraic manipulation
    
in polynomial arithmetic
    
procedure
    
table
Colmerauer, Alain
combination
    
combination as operator of
    
compound expression as operator of
    
evaluation of
    
lambda
expression as operator of
    
as operator of combination
    
as a tree
combination, means of
,
see also
closure
comma, used with backquote
comments in programs
Common Lisp
    
treatment of
nil
compacting garbage collector
compilation,
see
compiler
compile
compile-and-go
,
[2]
compile-and-run
compile-application
compile-assignment
compile-definition
compile-if
compile-lambda
compile-linkage
compile-proc-appl
compile-procedure-call
compile-quoted
compile-self-evaluating
compile-sequence
compile-time environment
,
[2]
,
[3]
    
open coding and
compile-variable
compiled-apply
compiled-procedure-entry
compiled-procedure-env
compiled-procedure?
compiler
    
interpreter vs.
,
[2]
    
tail recursion, stack allocation, and garbage-collection
compiler for Scheme
,
see also
code generator; compile-time environment; instruction sequence; linkage descriptor; target register
    
analyzing evaluator vs.
,
[2]
    
assignments
    code generators,
see
compile-...
    
combinations
    
conditionals
    
definitions
    
efficiency
    
example compilation
    
explicit-control evaluator vs.
,
[2]
,
[3]
    
expression-syntax procedures
    
interfacing to evaluator
    
label generation
    
lambda
expressions
    
lexical addressing
    
linkage code
    
machine-operation use
    
monitoring performance (stack use) of compiled code
,
[2]
,
[3]
    
open coding of primitives
,
[2]
    
order of operand evaluation
    
procedure applications
    
quotations
    
register use
,
[2]
,
[3]
    
running compiled code
    
scanning out internal definitions
,
[2]
    
self-evaluating expressions
    
sequences of expressions
    
stack usage
,
[2]
,
[3]
    
structure of
    
tail-recursive code generated by
    
variables
complex
package
complex numbers
    
polar representation
    
rectangular representation
    
rectangular vs. polar form
    
represented as tagged data
complex->complex
complex-number arithmetic
    
interfaced to generic arithmetic system
    
structure of system
composition of functions
compound data, need for
compound expression
,
see also
combination; special form
    
as operator of combination
compound procedure
,
see also
procedure
    
used like primitive procedure
compound query
    
processing
,
[2]
,
[3]
,
[4]
,
[5]
compound-apply
compound-procedure?
computability
,
[2]
computational process
,
see also
process
computer science
,
[2]
    
mathematics vs.
,
[2]
concrete data representation
concurrency
    
correctness of concurrent programs
    
deadlock
    
functional programming and
    
mechanisms for controlling
cond
(special form)
    
additional clause syntax
    
clause
    
evaluation of
    
if
vs.
    
implicit
begin
in consequent
cond->if
cond-actions
cond-clauses
cond-else-clause?
cond-predicate
cond?
conditional expression
    
cond
    
if
congruent modulo
n
conjoin
connect
,
[2]
connector(s), in constraint system
    
operations on
    
representing
Conniver
cons
(primitive procedure)
    
axiom for
    
closure property of
    
implemented with mutators
    
implemented with vectors
    
as list operation
    
meaning of the name
    
procedural implementation of
,
[2]
,
[3]
,
[4]
,
[5]
,
[6]
cons
up a list
cons-stream
(special form)
,
[2]
    
lazy evaluation and
    
why a special form
consciousness, expansion of
consequent
    
of
cond
clause
    
of
if
const
(in register machine)
    
simulating
    
syntax of
constant
(primitive constraint)
constant, specifying in register machine
constant-exp
constant-exp-value
constraint network
constraint(s)
    
primitive
    
propagation of
construct-arglist
constructor
    
as abstraction barrier
contents
    
using Scheme data types
continuation
    
in nondeterministic evaluator
,
[2]
,
see also
failure continuation; success continuation
    
in register-machine simulator
continue
register
    
in explicit-control evaluator
    
recursion and
continued fraction
    
e
as
    
golden ratio as
    
tangent as
control structure
controller for register machine
    
controller diagram
conventional interface
    
sequence as
Cormen, Thomas H.
corner-split
correctness of a program
cos
(primitive procedure)
cosine
    
fixed point of
    
power series for
cosmic radiation
count-change
count-leaves
,
[2]
    
as accumulation
    
as register machine
count-pairs
counting change
,
[2]
credit-card accounts, international
Cressey, David
cross-type operations
cryptography
cube
,
[2]
,
[3]
cube root
    
as fixed point
    
by Newton's method
cube-root
current time, for simulation agenda
current-time
,
[2]
cycle in list
    
detecting

Other books

Pride and Consequence by Altonya Washington
Flirty by Cathryn Fox
The Choice by Nicholas Sparks
Sexual Hunger by Melissa MacNeal
Skeleton Dance by Aaron Elkins
The Laughing Corpse by Laurell K. Hamilton
The Drowning Pool by Jacqueline Seewald