This book began as a series of lecture notes for a course called
Introduc- tion to Adaptive Systems which I developed for undergraduate
Computing Science majors at the University of Alberta and first taught
in 1973. The objective of the course has been threefold: (l) to expose
undergraduate computer scientists to a variety of subjects in the theory
and application of computation, subjects which are too often postponed
to the graduate level or never taught at all; (2) to provide
undergraduates with a background sufficient to make them effective
participants in graduate level courses in Automata Theory, Biological
Information Processing, and Artificial Intelligence; and (3) to present
a personal viewpoint which unifies the apparently diverse aspects of the
subject matter covered. All of these goals apply equally to this book,
which is primarily designed for use in a one semester undergraduate
computer science course. I assume the reader has a general knowledge of
computers and programming, though not of particular machines or
languages. His mathematical background should include basic concepts of
number systems, set theory, elementary discrete probability, and logic.