Вы находитесь на странице: 1из 5

Table of Contents

Preface

xiii

Running the Example Programs


1 Introduction to Programming Concepts
1.1
A calculator . . . . . . . . . . . . . . .
1.2
Variables . . . . . . . . . . . . . . . . .
1.3
Functions . . . . . . . . . . . . . . . . .
1.4
Lists . . . . . . . . . . . . . . . . . . .
1.5
Functions over lists . . . . . . . . . . .
1.6
Correctness . . . . . . . . . . . . . . .
1.7
Complexity . . . . . . . . . . . . . . . .
1.8
Lazy evaluation . . . . . . . . . . . . .
1.9
Higher-order programming . . . . . . .
1.10 Concurrency . . . . . . . . . . . . . . .
1.11 Dataflow . . . . . . . . . . . . . . . . .
1.12 Explicit state . . . . . . . . . . . . . .
1.13 Objects . . . . . . . . . . . . . . . . . .
1.14 Classes . . . . . . . . . . . . . . . . . .
1.15 Nondeterminism and time . . . . . . .
1.16 Atomicity . . . . . . . . . . . . . . . .
1.17 Where do we go from here? . . . . . .
1.18 Exercises . . . . . . . . . . . . . . . . .

xxix

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

1
1
2
2
4
7
9
10
11
13
14
15
16
17
18
20
21
22
23

GENERAL COMPUTATION MODELS

27

2 Declarative Computation Model


2.1
Defining practical programming languages
2.2
The single-assignment store . . . . . . . .
2.3
Kernel language . . . . . . . . . . . . . . .
2.4
Kernel language semantics . . . . . . . . .
2.5
Memory management . . . . . . . . . . . .
2.6
From kernel language to practical language
2.7
Exceptions . . . . . . . . . . . . . . . . . .

29
30
42
49
56
72
79
90

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

viii

Contents

2.8
2.9

Advanced topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

3 Declarative Programming Techniques


3.1
What is declarativeness? . . . . . . .
3.2
Iterative computation . . . . . . . . .
3.3
Recursive computation . . . . . . . .
3.4
Programming with recursion . . . . .
3.5
Time and space efficiency . . . . . . .
3.6
Higher-order programming . . . . . .
3.7
Abstract data types . . . . . . . . . .
3.8
Nondeclarative needs . . . . . . . . .
3.9
Program design in the small . . . . .
3.10 Exercises . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

111
114
118
124
127
166
177
195
210
218
230

4 Declarative Concurrency
4.1
The data-driven concurrent model . . . . . . . . . . . .
4.2
Basic thread programming techniques . . . . . . . . . .
4.3
Streams . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4
Using the declarative concurrent model directly . . . .
4.5
Lazy execution . . . . . . . . . . . . . . . . . . . . . . .
4.6
Soft real-time programming . . . . . . . . . . . . . . .
4.7
The Haskell language . . . . . . . . . . . . . . . . . . .
4.8
Limitations and extensions of declarative programming
4.9
Advanced topics . . . . . . . . . . . . . . . . . . . . . .
4.10 Historical notes . . . . . . . . . . . . . . . . . . . . . .
4.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

233
. 235
. 246
. 256
. 272
. 278
. 304
. 308
. 313
. 326
. 337
. 338

5 Message-Passing Concurrency
5.1
The message-passing concurrent model .
5.2
Port objects . . . . . . . . . . . . . . . .
5.3
Simple message protocols . . . . . . . . .
5.4
Program design for concurrency . . . . .
5.5
Lift control system . . . . . . . . . . . .
5.6
Using the message-passing model directly
5.7
The Erlang language . . . . . . . . . . .
5.8
Advanced topic . . . . . . . . . . . . . .
5.9
Exercises . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

345
347
350
353
362
365
377
386
394
399

6 Explicit State
6.1
What is state? . . . . . . . . . . . . . . .
6.2
State and system building . . . . . . . .
6.3
The declarative model with explicit state
6.4
Data abstraction . . . . . . . . . . . . .
6.5
Stateful collections . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

405
408
410
413
419
435

Contents

ix

6.6
6.7
6.8
6.9
6.10

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

440
450
463
479
482

7 Object-Oriented Programming
7.1
Inheritance . . . . . . . . . . . . . . . . .
7.2
Classes as complete data abstractions . .
7.3
Classes as incremental data abstractions
7.4
Programming with inheritance . . . . . .
7.5
Relation to other computation models .
7.6
Implementing the object system . . . . .
7.7
The Java language (sequential part) . . .
7.8
Active objects . . . . . . . . . . . . . . .
7.9
Exercises . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

489
491
492
502
518
537
545
551
556
567

8 Shared-State Concurrency
8.1
The shared-state concurrent model .
8.2
Programming with concurrency . . .
8.3
Locks . . . . . . . . . . . . . . . . . .
8.4
Monitors . . . . . . . . . . . . . . . .
8.5
Transactions . . . . . . . . . . . . . .
8.6
The Java language (concurrent part)
8.7
Exercises . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

569
573
573
582
592
600
615
618

9 Relational Programming
9.1
The relational computation model
9.2
Further examples . . . . . . . . .
9.3
Relation to logic programming . .
9.4
Natural language parsing . . . . .
9.5
A grammar interpreter . . . . . .
9.6
Databases . . . . . . . . . . . . .
9.7
The Prolog language . . . . . . .
9.8
Exercises . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

621
623
627
631
641
650
654
660
671

II

Reasoning with state . . . .


Program design in the large
Case studies . . . . . . . . .
Advanced topics . . . . . . .
Exercises . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.

SPECIALIZED COMPUTATION MODELS

10 Graphical User Interface Programming


10.1 The declarative/procedural approach . . .
10.2 Using the declarative/procedural approach
10.3 The Prototyper interactive learning tool .
10.4 Case studies . . . . . . . . . . . . . . . . .
10.5 Implementing the GUI tool . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

677

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

679
681
682
689
690
703

Contents

10.6

Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703

11 Distributed Programming
11.1 Taxonomy of distributed systems . . . . . .
11.2 The distribution model . . . . . . . . . . . .
11.3 Distribution of declarative data . . . . . . .
11.4 Distribution of state . . . . . . . . . . . . . .
11.5 Network awareness . . . . . . . . . . . . . .
11.6 Common distributed programming patterns
11.7 Distribution protocols . . . . . . . . . . . . .
11.8 Partial failure . . . . . . . . . . . . . . . . .
11.9 Security . . . . . . . . . . . . . . . . . . . .
11.10 Building applications . . . . . . . . . . . . .
11.11 Exercises . . . . . . . . . . . . . . . . . . . .
12 Constraint Programming
12.1 Propagate-and-search . . . . . . . . . . .
12.2 Programming techniques . . . . . . . . .
12.3 The constraint-based computation model
12.4 Defining and using computation spaces .
12.5 Implementing the relational computation
12.6 Exercises . . . . . . . . . . . . . . . . . .

III

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

707
710
712
714
720
723
724
732
739
743
745
746

. . . .
. . . .
. . . .
. . . .
model
. . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

749
750
755
758
762
772
774

SEMANTICS

13 Language Semantics
13.1 The general computation model . .
13.2 Declarative concurrency . . . . . .
13.3 Eight computation models . . . . .
13.4 Semantics of common abstractions .
13.5 Historical notes . . . . . . . . . . .
13.6 Exercises . . . . . . . . . . . . . . .

IV

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

APPENDIXES

777

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

779
780
804
806
808
808
809

813

A Mozart System Development Environment


815
A.1 Interactive interface . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
A.2 Command line interface . . . . . . . . . . . . . . . . . . . . . . . . . 817
B Basic Data Types
819
B.1 Numbers (integers, floats, and characters) . . . . . . . . . . . . . . 819
B.2 Literals (atoms and names) . . . . . . . . . . . . . . . . . . . . . . 824
B.3 Records and tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . 825

Contents

xi

B.4
B.5
B.6
B.7

Chunks (limited records)


Lists . . . . . . . . . . .
Strings . . . . . . . . . .
Virtual strings . . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

828
828
830
831

C Language Syntax
C.1 Interactive statements . . . . . . . . . . . .
C.2 Statements and expressions . . . . . . . . . .
C.3 Nonterminals for statements and expressions
C.4 Operators . . . . . . . . . . . . . . . . . . .
C.5 Keywords . . . . . . . . . . . . . . . . . . .
C.6 Lexical syntax . . . . . . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

833
834
834
836
836
839
839

D General Computation Model


D.1 Creative extension principle
D.2 Kernel language . . . . . . .
D.3 Concepts . . . . . . . . . . .
D.4 Different forms of state . . .
D.5 Other concepts . . . . . . .
D.6 Layered language design . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

843
844
845
846
849
850
850

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

References

853

Index

863