beta-equivalence, see alsobeta-reduction, 8
beta-reduction, 9
bound occurrence, see occurrence, bound
boxed values, 11
call-by-name, 12, 13
call-by-need, 14
call-by-reference, 15
call-by-value, 16
capture, 17, 18
capture-avoiding substitution, 19, 20
classes, 21
closed expression, 22
closure, 23
closure conversion, 24
compilation, 25
concrete syntax, 26, 27
congruence, 28
control operations, 29
curried function, 30
cyclical store, 31
D, 32
operational semantics, 33
syntax, 34
abstract, 35
concrete, 36
D, 37
DDK, 38
source code, 39
usage, 40
denotational semantics, 41
deterministic languages, 42, 43
dispatch, 44
DOB, 45
interpreter for, 46
syntax
abstract, 47
concrete, 48
translating to DSR, 49
domain theory, 50
DR, 51
DS, 52
interpreter, 53
DSR, 54
DSR, 55
DV, 56
DX, 57
dynamic dispatch, 58, 59
ED, 60
environment-based interpreters, see interpreters, environment-based
equational inference, 62
equational types, see types, equational
equivalence, see operational equivalence
eta-conversion, 65
eta-equivalence, 66
exceptions, 67
explicit environment interpreter, 68
faithful implementation, 69, 70
flow analysis, 71
freezing, see alsothawing, 73
function hoisting, 74
garbage collection, 75, 76
generic types, 77
Haskell, 78
information hiding, 79
inheritance, 80
interpreters
environment-based, 81
writing using DDK, 82
l-value, see alsor-value, 84
lambda-calculus, 85
lazy evaluation, 86
lists
encoding in D, 87
logical combinators, 88
loops, 89
metacircular interpreter, 90
metavariables, 91
nonlocal variable, 92
normalizing languages, 93, 94, 95
object polymorphism, 96, 97, 98
relation to record polymorphism, 99
objects, 100
encoding as records, 101
encoding in DSR, 102
occurrence, 103
bound, 104
free, 105
operational equivalence, 106
operational semantics, 107, 108
definition, 109
pairs, see tuples
parametric polymorphism, 111
partial recursive function, 112
PED, 113
polymorphism, 114
on objects, see object polymorphism
on records, see record polymorphism
primitive objects, 117
principal type, 118
program context, 119
proof, 120
proof system, 121
r-value, see alsol-value, 123
record polymorphism, 124, 125
records, 126
recursion
encoding in D, 127
reflexivity, 128
renaming substitution, see capture-avoiding substitution
Return, 130
runtime environment, 131
Russell’s Paradox, 132
self-application encoding, 133
semantics, 134
sequencing, 135
side-effects, 136, 137
state, 138
static fields, 139
static methods, 140
STD, 141
store, 142, 143
stuck state, 144
subtype polymorphism, 145
subtyping, 146, 147
symmetry, 148
syntax, 149
syntax tree, 150
TD, 151
type rules, 152
TDSRX, 153
thawing, see alsofreezing, 155
threading, 156
transitivity, 157
tuples, 158
encoding in D, 159
Turing-complete, 160, 161, 162
tying the knot, 163
type assertion, 164
type checking, 165, 166
type environment, 167
type inference, 168, 169, 170
and polymorphism, 171
constrained, 172
type schema, 173
type soundness, 174
type systems, 175, 176
dynamic, 177
equational, 178
overview of, 179
static, 180
types, 181, 182
checking, see type checking
inference, see type inference
untyped languages, 185
variable capture, see capture
variable substitution, 187
definition, 188
variants, 189
polymorphism, 190