Index

%, 111 apply, 270 |, 98 arithmetic series, 429 =, 20 arity, 62, 79 ==, 19 array, 44, 85 15 puzzle, 200 array maximum, 405 1-adic, 106 array processor, 593 5-tuple, 213 array sorting, 406 a priori scheduling, 588 assembler, 553 abstract array, 53 assembly language, 547, 553 abstract base class, 256 assignment, 313 , 52, 231 assoc, 61, 64 abstract grammar, 297 association list, 64 abstract-syntax , 296 atom, 31 acceptor, 481 atomic, 16 accumulator, 133 attribute, 229 Ackermann’s function, 109, 129, auxiliary, 132, 284 559 awt (abstract window toolkit), 264 acyclic, 26 backtracking, 387 add, 106 barrel shifter, 121, 544 addition, 106 base class, 246 address, 39 based addressing, 574 adjacency matrix, 41 based indexed addressing, 574 ADT, 52, 231 basis, 101 aggregation, 243 BCD, 331 allocation, 230 beta reduction, 103 ALU, 569 binary adder, 493 Amdahl’s law, 426, 615 binary relation, 25, 64 anchor variable, 404 binary representation, 49 and function, 341 binary search, 464 anonymous function, 67 , 465 antiprefix, 62 binary-coded decimal, 331 any, 76 binary-tree representation, 30 append, 63, 83 binding, 21, 313 append predicate, 396 bit, 49 applet, 247 bit vector, 466 applicative-order, 148 622 Index

Boole/Shannon expansion combinational switching principle, principle, 352 335 Boolean algebra, 327 commute, 66 bottom up, 211 compiler, 547 bound, 21 compiler generator, 314 braces-as-alternatives, 299 complexity, 421 breadth-first ordering, 142 compose, 272 breadth-first search, 140, 186, 500 compose_list, 85 breadth-first traversal, 179 composition, 71, 72, 243 bucket, 181, 450 computer network, 605 built-in functions in rex, 19 concat, 271 bus structure, 541 concrete, 53 butterfly, 604 concurrency, 585 cache coherency, 605 conditional expression, 112 cache memory, 422 conjunction, 348 caching, 61 connection matrix, 41 calculus, 73 connective, 339 calling conventions, 556 consensus, 371 Cartesian encoding, 331 consensus rule, 369 Cartesian product, 75, 197, 213 consing, 22 cell, 166 constant function, 59 cellular automaton, 594 constructor, 230 chain rule, 73 context-free grammar, 285, 290 channel, 579 controller, 481 child, 586 convolution, 160 Chinese rings puzzle, 200 copy rule, 103 chunk, 238 copying, 261 Church/Turing Hypothesis, 280 countable, 277 CISC, 547 countably-infinite, 277 class, 229 counterexample, 357 classifier, 473, 481 counting principle, 197 client, 229 critical section, 602 client-server, 605 crossover point, 432 clock quantization, 517 cursor, 268 clocked latch, 530 cyclic, 26 closed list, 14, 168 D flip-flop, 518 closure, 272 dag, 46 code factoring, 243 data container, 239 combination lock, 524 database, 381 decoder, 376 Index 623 decoding, 568 domino problems, 613 deep copying, 261 double layer of arguments, 71 defer, 47, 150 double-ended queue, 242 deferred binding, 47 doubly-, 166, 177 define a function, 67 drop, 80, 128 define operator, 20 dynamic programming principle, definite iteration, 281 211 delay, 151, 152 edge-detector, 474 DeMorgan’s laws for quantifiers, edge-triggered, 530 384 effective address, 574 demultiplexer, 375 effort, 606 dense, 466 ellipsis convention, 300 depth-first ordering, 140 empty list, 17, 30 depth-first search, 139, 388 encoder, 376 deque, 239, 242 encoding, 328 dequeue, 239 energy function, 413 dereference, 165 enqueue, 239 derivation tree, 291 enumerate, 60 derived class, 246 enumeration, 60 derives, 292 envelope, 430 deterministic, 191 environment, 21 deterministic acceptor, 500 equal, 108 dictionary, 64 equal lists, 17 difference, 137 equality operator, 19 digit, 49 equation, 60, 112 direct addressing, 572 equational guard, 112 direct memory access, 579 error-correcting code, 332 directed acyclic graph, 46 Euclid’s algorithm, 110 directed graph, 25, 143 Euler’s method, 158 directives, 554 evolutionary development, 230 directory structure, 28 exclusive-or, 341 disjunction, 348 existential quantifier, 384 dispatch, 560 extends, 246 distributed memory, 603 factorial, 133, 202 distribution sorting, 450 factorial program in Lisp, 318 diverge, 149 fail, 97 divide, 59, 128 Fast Fourier Transform, 121 divide-and-conquer principle, 454 Fibonacci function, 210, 559 DMA, 579 Fibonacci sequence, 155 DMUX, 375 field, 54, 449 624 Index file memory, 422 invariant, 456 find, 81 heterogeneous list, 22 find_index, 127 hierarchical list, 26 find_indices, 81 higher-order function, 67 finite, 277 higher-order predicate, 79 finite-state automata, 471 histogram, 162 finite-state machine, 471, 610 homogeneous, 16 foldl, 83, 85, 134 Horner’s Rule, 117, 118 foldr, 83, 85, 134 hypercube, 279, 334, 362 forest, 38 hypertext link, 39 fork, 586 identifier, 20 formal polynomial, 52 identity, 65 fractal, 189 if, 149 Fredkin automaton, 596 if function, 341 free variable, 68 iff, 341 full adder, 373 image, 42 function, 58 immutable, 260 functional expression, 67 implementation inheritance, 253 fundamental list-dichotomy, 17, implementing finite-state 100 machines, 514 Game of Life, 595 implies function, 342 gather, 81 imported, 68, 69 gcd, 110, 112 includes, 137 general recursive function, 219 indefinite iteration, 129, 281 generator, 481 indeterminacy, 600 getter, 230 index, 44 glitch, 616 index register, 573 goal, 387 indexed addressing, 573 grammar, 284 indirect addressing, 572 graphical user interface, 162 induction rule, 101 grouping, 303 inductive, 101 guarded rule, 110 inductive argument, 102, 105 Halmos, 276 infinite, 277 Hamming distance, 334 infinite list, 151 handshaking, 575 Infinity, 60 hash function, 181 inheritance, 245 , 181 in-order traversal, 179 hashing, 44, 180, 467 insertion sort, 122, 453 header, 174 instance, 230 heap, 456 instance variable, 231 Index 625 instanceof, 259 leafcount, 24 instruction fetch cycle, 565 left recursion, 305 instruction pointer, 407, 548 leftmost applicative-order, 148 instruction register, 565 length, 101, 171 interface, 132 length, 24 interface inheritance, 253 less_than_or_equal, 108 internal representation of lists, 32 level-order, 179 Internet, 39 lexicographic ordering, 63 interpret, 565 LIFO, 232 interpretation, 379 limit rule, 446 interpreter, 547 linear addressing principle, 44, interrupt, 578 180, 182, 560 interrupt mask register, 579 link, 48 interrupt service routine, 578 linked list, 165 interrupt vector, 578 Lisp, 15 intersection, 137, 537 list, 59, 67 irreducible, 101 list of functions, 69 is a, 252, 253 loader, 548 is_integer, 75 locality, 605 is_number, 75 loop, 154 ISC, 548 loop invariant, 408 ISC internal structure, 567 lower bound, 446 ISCAL, 553 lower-bound, 609 iterated consensus, 369 machine language, 547 iterative deepening, 146 mailbox, 602 Java, 15 make_array, 86 Karnaugh map, 358 map, 66, 67, 76, 84, 86, 116, 271, keep, 80, 84, 128 591 key, 449 mappend, 134 Kleene's Theorem, 506 mapping, 66 knowledge base, 381 maps to, 58 L’Hopital's Rule, 446 Markov algorithm, 219 labeled binary tree, 178 match, 77 labeled directed graph, 40 matrix, 40 labeled-tree interpretation, 28 maximal sub-cubes, 362 lambda calculus, 69, 219 McCarthy's Transformation language, 283, 481 Principle, 204 last, 174 Mealy machine, 473 latch, 528 meaning of an expression, 313 leaf, 26, 88 member, 135 626 Index memory address register, 565 non-terminal, 284 memory data register, 565 non-termination, 60 memory hierarchy, 422 nor, 341 memory protection, 582 normal order, 149 memory-mapped I/O, 561 normzalization, 243 merge sort, 124, 463 NP, 615 message, 603 N-queens problem, 393 message queue, 602 n-tuples, 137 method, 228 null, 11 MIDI, 481 number, 49 MIMD, 597 Number class, 260 minsort, 453 numbering of functions, 340 minterm, 348 numeral, 49 minterm expansion principle, 349 object, 227 mixed radix, 128 Object class, 259 mod, 111, 114, 119 object-oriented programming, 52 modulo, 111 oct-tree, 36 modulo-2 addition, 332 offset, 574 Moore machine, 473 one-to-one, 59 Morse code, 40 open list, 14, 168 multiple-instruction, multiple-data, operating system, 185 597 or function, 341 multiplexor, 121, 354, 540 ordered dictionary, 65 multiplication rule, 438 oriented directed graph, 40 multiply, 128 overload, 62, 133 multiprocessing, 587 over-riding, 246, 247 multipy-by-two, 491 page table, 183, 580 multi-stage interconnect, 604 pages, 183 mutual exclusion, 602 paging memory, 422 mutual recursion, 139 pairs, 70, 75, 161 MUX, 540 parallel, 57 nand, 342 parallel assignment, 205 n-ary, 62 parallel composition, 537 natural number, 106, 151 parallel transfer, 539 new operator, 231, 235 parallelism, 585 nim, 92 parent, 586 nim sum, 93 parity bit, 332 non_zero, 108 parsing, 293 non-deterministic, 191 partial correctness, 407 non-deterministic transition, 498 partial function, 59, 65 Index 627 partial function computed by a principle of locality, 183 TM, 213 principle of modularity, 229 partial recursive function, 219, 280 principle of radix representation, partial_sums, 152 118 pattern, 97, 284 principle of virtual contiguity, 182, peg solitaire, 198 251 peripheral processors, 579 , 239, 457 permutation, 406, 610 procedural interpretation, 386 phrase-structure grammar, 219, procedure, 58 285, 290 process, 586 pid, 586 process id, 586 pigeon-hole principle, 610 production, 284 pipe, 588, 603 profiling, 426 pipe composition, 153 program compaction principle, 208 pipeline, 72, 580, 591 program counter, 548 pixel, 33 program variables, 202 PLA, 350 programmable logic array, 350 pointer, 11, 32, 45 Prolog, 15, 192, 381 Polylist, 264 Prolog programmers' manifesto, polymorphic, 76, 264 392 polynomial rule, 437 proper subtraction, 107 pop, 232 proposition logic, 327 post-condition, 409 proposition logic satisfiability, 610 post-order traversal, 179 pseudo-operation, 554 power, 210 push, 232 power , 135 quad-tree, 33 precedence, 294, 303 quantifier, 79, 383 pre-condition, 409 quantifiers over array indices, 405 predecessor, 107, 187 queue, 140, 174, 239, 253 predicate, 138, 379 Quicksort, 134, 454 predicate logic, 379 quoting, 287 prefix, 62 R expression, 51 pre-order traversal, 179 race condition, 600 prime implicants, 362 radix principle, 120, 125, 450, 544 primes, 153 radix sort, 121, 125 primitive recursion, 280 range, 62, 115 principle of diagonalization, 611 raster encoding, 35 principle of inductive definition, reachability matrix, 41 275 reachability relation, 190 principle of interning, 262 reachable, 26 628 Index read/write strobe, 576 S expression, 51, 77, 264 read-only variable, 403 satisfy, 79 recognizer, 481 scaffolding, 284 record, 54 scalability, 604 recursion manifesto, 115 scale, 115 recursive, 101 , 113 recursive descent, 305, 388 select, 127, 129 recursive function theory, 106 select_min, 123 recursive procedures, 557 selection sort, 123 recursive type definition, 167 selector, 354 reduce, 82, 83, 84, 134 self-scheduling, 588 reference, 45, 47, 165, 168, 171, self-similar system, 189 231 semantics, 290 referential transparency, 57 semaphore, 601 register, 534 semi-asynchronous, 576 register machine (Shepherdson and sequence, 44 Sturgis), 219 sequencer, 481 register-indirect addressing, 548 sequences as functions, 85 regular expression, 284, 501 sequential behavior of AND-gate, regular expression identities, 503 515 regular language, 504 sequential binary adder, 522 release (ISCAL), 555 serial transfer, 539 remove_duplicates, 62, 87, 127 set, 22 representation invariant, 23 set of all subsets of ω, 278 resource, 421 set selection, 80 rest, 17 setter, 230 return-from-interrupt instruction, shallow copying, 261 579 shared memory, 598 reverse, 63 shift register, 539 reverse Polish notation, 316 short-circuit convention, 345 rewrite rule, 101 side effect, 57 rex, 15, 19 SIMD, 592 Rice's theorem, 614 single-instruction stream, multiple ring, 178 data stream, 592 ripple-carry, 373 singly-linked list, 51 RISC, 547 size, 328 root, 26 small-integer interning, 262 RPN, 316 Smalltalk, 228 Runge-Kutta, 162 sockets, 605 Russian peasants’ principle, 121 solfege, 65 Index 629 some, 84 sum-of-product, 362 SOP, 362 superpower, 109 sort, 63, 87 switch statement, 560 sorting, 122, 449 switching logic, 327 special element, 60 symmetric transition relation, 188 specifying properties of a program, synchronize, 602 397 synchronizer, 616 speedup, 606 synchronous design, 519 spreadsheet model, 321 syntax, 290 square root, 211 syntax diagram, 300 stack, 174, 232 syntax-directed compiler, 314 stack, 253 tag, 151 stand-alone convention, 342, 379 tag system, 219 star operator, 287 tail of a list, 45 start symbol, 284 tail-recursion, 132 state, 185 target, 26 state transition, 390 target set, 26 static method, 231 tautology, 343 static variable, 231 Taylor’s series, 160 step-counting principle, 422 template, 97 Stirling’s formula, 610 terminal alphabet, 284 stone age, 106 termination, 407 stored-program computer, 547 three-state buffer, 541, 565, 616 straight-line programs, 423 tight upper bound, 431, 447 stratifying, 295 total correctness, 407 stream parallelism, 588 transducer, 473 strobe, 575 transition, 187 struct, 54, 449 transition function, 212 structural induction, 399 transition induction, 401 structure sharing, 319 transition relation, 187 sub-class, 252 transition rules, 193 sub-cube, 282 transitive closure, 42, 102, 190 substitution principle, 344 transitivity rule, 435 subsumption rule, 369 transparent latch, 530 subtract, 107 transpose, 52, 78 sub-tree, 26 trap, 579 successor, 187 traveling salesman problem, 610 successor function, 106 traversal, 179 suffix, 62 tree, 26 sum rule, 436 tree structuring principle, 456 630 Index , 36, 467 virtual memory, 580 truth value, 339 voxel, 40 Turing machine, 211 wait state, 566, 576 Turing's thesis, 215 water jugs puzzle, 199, 389 two-valued domain, 327 weakest liberal precondition, 416 type, 22, 75 web browser, 39 type name, 230 window, 252 unbound, 21, 68 World-Wide Web, 39 undefined, 59 worst-case, 430 undirected graph, 43 wrapper, 174 union, 135 wrapper, 259 unit, 82 xor, 341 unit delay machine, 492 yacc, 314 universal combinational logic yields, 58 synthesis, 347 zig-zagging, 161 universal quantifier, 384 zip, 63 universal Turing Machine, 214 ∀, 384 UNIX, 72, 586 ∃, 384 unlabeled-tree interpretation, 28 Ω, 609 unordered array, 464 λ transition, 498 upper bound, 430 µ operator, 281 use (ISCAL), 555 ω, 276 valid, 381 verification condition, 408