WHAT IS IT?
-----------
	This program models one-dimensional cellular automata.
A cellular automaton is a computational machine that
performs actions based on certain rules.  It can be thought
of as a "board" which is divided into cells
(such as the square cells of a checkerboard).  Each cell
can be either on or off.  This is called the "state" of the
cell.  According to specified rules, each cell will be on
(alive) or off (dead) at the next time step.  In this case
of one-dimensional cellular automata, each cell checks the
state of itself and its neighbors to the left and right, and
then sets the cell below itself to either on or off,
depending upon the rule.  This is done in parallel and
continues until the bottom of the board.  Cellular automata
can be created on any board size and dimension.

HOW TO USE IT
-------------
	There are two settings, PARTIAL-SCREEN and FULL-SCREEN.    
The difference is that the FULL-SCREEN gives a larger board 
to view, while the PARTIAL-SCREEN will allow a demo mode.   
Click DEMO (while in PARTIAL-SCREEN mode) to see what the
current rules will produce for each of the possible states
of a cell's neighborhood.  The rules are set by the eight
switches on the right.

The names of the switches correspond to cell states.  "O" means
off, "I" means on.  For example, the top switch is called "OOO".  
(NOTE: the switch names are composed of the letters "I" and "O", 
not the numbers zero or one). 
If this switch is set to 1, then the following rule
is created: when a cell is off, its left neighbor cell is
off and its right neighbor cell is off, then the cell below
it will be set on at the next time step.  If this switch is
set to 0, then the cell below it will be set to off at the
next time step.  So, since each switch has two settings and
there are eight switches, there are 256 (2^8) possible rules.
 The current rule number is shown in the "RULE" monitor, and
it is calculated by changing a switch's name from binary to 
decimal and taking the sum of all the switches that are set
to one.  For example, if "011" and "001" are set to 1 and
all the rest are set to 0, then the rule number is 4
(011=3, 001=1, 3+1=4)).  To make the time step, click GO.
	There are three ways to setup the initial line of cells. 
SETUP-SINGLE will start with a single cell set to on in the
center of the board.  SETUP-RANDOM will start with a line of
cells that have a random amount set to on.  This density can
be controlled with the global variable 'density.
The third way is to add points by clicking the mouse.  Click on 
ADD-POINTS and then click the mouse along the first row to set
various cells to on.
	The background color and foreground color can be set via
the global variables 'fgcolor' and 'bgcolor'.

RUNNING the MODEL
-----------------

  THINGS TO NOTICE
  ----------------

  What different patterns are formed by using a random setup
  and a single setup?	

  Why do some rules always end up the same, regardless of how
  it is initially started?

  Are there rules that repeat a pattern indefinitely?

  Are there rules that produce seemingly chaotic, random results?

  Can all rules be classified into these above types? Are there
  more rule types than these?


  THINGS TO TRY
  -------------

  Find some rules that converge to all cells on or all cells off.

  Are there any rules that converge to all cells on or all
  cells off, depending upon the initial percentage of on/off
  cells?

  A classic automaton is used to compute various things.  Can
  these cellular automata be used to compute anything?  How?

  Experiment with the density variable and various types of
  rules. What are some relationships?


EXTENDING THE MODEL
-------------------

What if a cell's neighborhood was five - two to the left,
itself, and two to the right?

Try making a two-dimensional cellular automaton.  The
neighborhood could be the eight cells around it, or just the
cardinal cells (the cells to the right, left, above, and below).


STARLOGOT FEATURES
-----------------

Notice the use of "mouse-xcor" and "mouse-ycor" to allow the
user to interact withe the simulation in the graphics
window.

Examine the use of the "setvariable-at x y" command to allow
the patches to get information about their neighbors.