Arjen Markus (19 july 2010) As demonstrated by Stephen Wolfram [L1 ], very simple programs can exhibit very complex behaviour. Here is a small example (the code is not as nice as it could have been, I did not want to spend too much time ;)).
The output when viewed as bit patterns seems to be random with no discernible patterns - viewing them as numbers reveals a much clearer picture - I will leave that as an exercise ;). And I intend to get the book from the library when I am back from my holidays.
# wolfram.tcl --
# Automaton producing seemingly random output
#
proc step {} {
global program memory position last
foreach {cmd reg label} $program($position) {
if { $cmd eq "INCR" } {
incr memory($reg)
incr position
} elseif { $cmd eq "DECJ" } {
if { $memory($reg) > 0 } {
incr memory($reg) -1
set position $label
} else {
incr position
}
}
if { $position > $last } {
set position 0
}
puts "$memory(1) $memory(2)"
}
}
# main --
#
set position 0
set memory(1) 0
set memory(2) 0
set program(0) {INCR 1}
set program(1) {INCR 1}
set program(2) {INCR 1}
set program(3) {DECJ 2 0}
set program(4) {DECJ 1 5}
set program(5) {INCR 2}
set program(6) {DECJ 1 4}
set program(7) {DECJ 1 2}
set last 7
for { set i 0 } { $i < 1000 } { incr i } {
step
}