The large number of ways to solve some given problem makes it necessary to point out the easy way of doing things, especially to users who have been familiar with one of the traditional programming languages. The designers' view was expressed in my first book, Programming in Mathematica. My goal was to explain the ideas behind the language and to develop useful example programs. This strategy is continued in an ongoing series of articles in The Mathematica Journal, entitled The Mathematica Programmer. The title of this series is now also the title of this book series. A first installment of these articles was published in the first volume. Now, another set of articles has accumulated and is part of this Volume II. The articles can be divided roughly into two kinds: explanations of fundamental programming paradigms and applications, this time mostly visualizations. This distinction is reflected in the two parts that make up this book. Besides the articles from the journal, and one article from Mathematica in Education, I have included new material, such as Chapter 1, which has been updated from a similar introduction in the first volume. The material from the articles has been expanded and all program listings are now included.
The first articles appeared before Version 2.0 of Mathematica, and all articles appeared before Version 3. Because there have been major improvements from Version 1 to Version 3, as well as a few incompatibilities, I took the opportunity to update all programs from both volumes to Version 3. All programs are included in the accompanying CD-ROM.
Pictures are always a good means of explaining things. The beauty of well-chosen graphics illustrations is in itself an important aspect of the otherwise rather dry world of computers. The color insert in this book gives me the chance to show the full range of possibilities. In all cases Mathematica delivered the raw data, which was then turned into color illustrations using a variety of techniques, which are the topic of the second part of this book.
The CD-ROM contains all the information relating to this book that is best accessed in electronic form, such as the programs, notebooks with examples, color images, and pointers to resources on the Internet. The information on the CD-ROM can be accessed through a hypertext system.
My thanks go foremost to the editors of The Mathematica Journal and Mathematica in Education, Troels Petersen and Paul Wellin, respectively. They helped me put my writings into a form worthy of publication. I would like to thank Miller-Freeman, Inc., for giving me permission to include the articles from The Mathematica Journal in this book, and Springer-Verlag/TELOS for doing likewise with the article that appeared first in Mathematica in Education (now called Mathematica in Education and Research). Chuck Glaser from Academic Press encouraged me to publish this second volume.
A number of people contributed to particular subject matters.
Robert Marti helped me develop the logic interpreter,
and Georgios Grivas and Stephan Zahner wrote the first
version of the unifier.
Zvi Har'El made many
helpful comments on a draft of Chapter 9.
The visualization chapters benefit from the easy availability of
good ray-tracing and stereogram programs.
My thanks go foremost to the POVray team
and to Craig E. Kolb
for writing the ray tracers,
and to Pascal Massimino for his RAYsis.
The programs work very well.
Special recognition to Jef Poskanzer for developing the
PBM package,
which successfully
tackles the jungle of graphic file formats.
John Bradley's program xv
was most useful for looking at the graphics
on my workstation screen.
More information about all of these programs is included
on the Mathematica Programmer CD-ROM.
Plate 13 was produced by F. Bachmann,
ETH Zurich,
using my ray-traced images.
M. Braschler helped me prepare the material on the CD-ROM.