Rev | Author | # | Line |
---|---|---|---|
1 | GlynWebster | 1 | This is a poem, and artifical life simulator, in [Forth] by Leo Wong: |
2 | |||
3 | AristotlePagaltzis | 3 | <verbatim> |
4 | \ Conway's Game of Life, or Occam's Razor Dulled | ||
1 | GlynWebster | 5 | |
3 | AristotlePagaltzis | 6 | MARKER Genesis |
1 | GlynWebster | 7 | |
3 | AristotlePagaltzis | 8 | \ ANS Forth this life is remains and |
9 | 1 CHARS CONSTANT /Char | ||
10 | : C+! ( char c-addr -- ) DUP >R C@ + R> C! ; | ||
1 | GlynWebster | 11 | |
3 | AristotlePagaltzis | 12 | \ the universal pattern |
13 | 25 CONSTANT How-Deep | ||
14 | 80 CONSTANT How-Wide | ||
15 | How-Wide How-Deep * 1- \ 1- prevents scrolling on my screen | ||
16 | CONSTANT Homes | ||
1 | GlynWebster | 17 | |
3 | AristotlePagaltzis | 18 | \ world wrap |
19 | : World | ||
20 | CREATE ( -- ) Homes CHARS ALLOT | ||
21 | DOES> ( u -- c-addr ) SWAP Homes + Homes MOD CHARS + ; | ||
1 | GlynWebster | 22 | |
3 | AristotlePagaltzis | 23 | World old |
24 | World new | ||
1 | GlynWebster | 25 | |
3 | AristotlePagaltzis | 26 | \ biostatistics |
1 | GlynWebster | 27 | |
3 | AristotlePagaltzis | 28 | \ begin hexadecimal numbering |
29 | HEX \ hex xy : x holds life , y holds neighbors count | ||
1 | GlynWebster | 30 | |
3 | AristotlePagaltzis | 31 | 10 CONSTANT Alive \ 0y = not alive |
1 | GlynWebster | 32 | |
3 | AristotlePagaltzis | 33 | \ Conway's rules: |
34 | \ a life depends on the number of its next-door neighbors | ||
1 | GlynWebster | 35 | |
3 | AristotlePagaltzis | 36 | \ it dies if it has fewer than 2 neighbors |
37 | : Lonely ( char -- flag ) 12 < ; | ||
1 | GlynWebster | 38 | |
3 | AristotlePagaltzis | 39 | \ it dies if it has more than 3 neighbors |
40 | : Crowded ( char -- flag ) 13 > ; | ||
1 | GlynWebster | 41 | |
3 | AristotlePagaltzis | 42 | : -Sustaining ( char -- flag ) |
43 | DUP Lonely SWAP Crowded OR ; | ||
1 | GlynWebster | 44 | |
3 | AristotlePagaltzis | 45 | \ it is born if it has exactly 3 neighbors |
46 | : Quickening ( char -- flag ) | ||
47 | 03 = ; | ||
1 | GlynWebster | 48 | |
3 | AristotlePagaltzis | 49 | \ back to decimal |
50 | DECIMAL | ||
1 | GlynWebster | 51 | |
3 | AristotlePagaltzis | 52 | \ compass points |
53 | : N ( i -- j ) How-Wide - ; | ||
54 | : S ( i -- j ) How-Wide + ; | ||
55 | : E ( i -- j ) 1+ ; | ||
56 | : W ( i -- j ) 1- ; | ||
1 | GlynWebster | 57 | |
3 | AristotlePagaltzis | 58 | \ census |
59 | : Home+! ( -1|1 i -- ) >R Alive * R> new C+! ; | ||
1 | GlynWebster | 60 | |
3 | AristotlePagaltzis | 61 | : Neighbors+! ( -1|0|1 i -- ) |
62 | 2DUP N W new C+! 2DUP N new C+! 2DUP N E new C+! | ||
63 | 2DUP W new C+! ( i ) 2DUP E new C+! | ||
64 | 2DUP S W new C+! 2DUP S new C+! S E new C+! ; | ||
1 | GlynWebster | 65 | |
3 | AristotlePagaltzis | 66 | : Bureau-of-Vital-Statistics ( -1|1 i -- ) |
67 | 2DUP Home+! Neighbors+! ; | ||
1 | GlynWebster | 68 | |
3 | AristotlePagaltzis | 69 | \ mortal coils |
70 | CHAR ? CONSTANT Soul | ||
71 | BL CONSTANT Body | ||
1 | GlynWebster | 72 | |
3 | AristotlePagaltzis | 73 | \ at home |
74 | : Home ( char i -- ) How-Wide /MOD AT-XY EMIT ; | ||
1 | GlynWebster | 75 | |
3 | AristotlePagaltzis | 76 | \ changes, changes |
77 | : Is-Born ( i -- ) | ||
78 | Soul OVER Home | ||
79 | 1 SWAP Bureau-of-Vital-Statistics ; | ||
80 | : Dies ( i -- ) | ||
81 | Body OVER Home | ||
82 | -1 SWAP Bureau-of-Vital-Statistics ; | ||
1 | GlynWebster | 83 | |
3 | AristotlePagaltzis | 84 | \ the one and the many |
85 | : One ( c-addr -- i ) | ||
86 | 0 old - /Char / ; | ||
1 | GlynWebster | 87 | |
3 | AristotlePagaltzis | 88 | : Everything ( -- ) |
89 | 0 old Homes | ||
90 | BEGIN DUP | ||
91 | WHILE OVER C@ DUP Alive AND | ||
92 | IF -Sustaining IF OVER One Dies THEN | ||
93 | ELSE Quickening IF OVER One Is-Born THEN THEN | ||
94 | 1 /STRING | ||
95 | REPEAT 2DROP | ||
96 | How-Wide 1- How-Deep 1- AT-XY ; | ||
1 | GlynWebster | 97 | |
3 | AristotlePagaltzis | 98 | \ in the beginning |
99 | : Chaos ( -- ) | ||
100 | 0 old Homes BLANK ; | ||
1 | GlynWebster | 101 | |
3 | AristotlePagaltzis | 102 | \ an angel |
103 | : Serpent ( -- ) | ||
104 | 0 2 AT-XY ." Press a key for knowledge." KEY DROP | ||
105 | 0 2 AT-XY ." Press space to re-start, Esc to escape life." ; | ||
1 | GlynWebster | 106 | |
3 | AristotlePagaltzis | 107 | \ spirit |
108 | : Say ( -- addr u ) | ||
109 | PAGE | ||
110 | ." Say: " 0 new DUP Homes ACCEPT ; | ||
1 | GlynWebster | 111 | |
3 | AristotlePagaltzis | 112 | \ before history |
113 | : Innocence ( -- ) | ||
114 | Homes 0 | ||
115 | DO I new C@ Alive / I Neighbors+! LOOP ; | ||
1 | GlynWebster | 116 | |
3 | AristotlePagaltzis | 117 | \ children become parents |
118 | : Passes ( -- ) 0 new 0 old Homes CMOVE ; | ||
1 | GlynWebster | 119 | |
3 | AristotlePagaltzis | 120 | \ a garden |
121 | : Paradise ( addr u -- ) | ||
122 | >R How-Deep How-Wide * How-Deep 2 MOD 0= How-Wide AND - | ||
123 | R@ - 2/ old | ||
124 | R> CMOVE | ||
125 | 0 old Homes 0 | ||
126 | DO COUNT BL <> | ||
127 | DUP Alive AND I new C! | ||
128 | IF Soul I Home THEN | ||
129 | LOOP DROP | ||
130 | Serpent | ||
131 | Innocence Passes ; | ||
1 | GlynWebster | 132 | |
3 | AristotlePagaltzis | 133 | : Creation ( -- ) Chaos Say Paradise ; |
134 | : Generation ( -- ) Everything Passes ; | ||
1 | GlynWebster | 135 | |
3 | AristotlePagaltzis | 136 | \ the human element |
1 | GlynWebster | 137 | |
3 | AristotlePagaltzis | 138 | 100 VALUE Ideas |
139 | : Dreams ( -- ) Ideas MS ; | ||
1 | GlynWebster | 140 | |
3 | AristotlePagaltzis | 141 | 100 CONSTANT Images |
142 | : Meditation ( -- ) Images MS ; | ||
1 | GlynWebster | 143 | |
3 | AristotlePagaltzis | 144 | \ free will |
145 | : Action ( -- char ) | ||
146 | KEY? DUP | ||
147 | IF DROP KEY | ||
148 | DUP BL = IF Creation THEN | ||
149 | THEN ; | ||
1 | GlynWebster | 150 | |
3 | AristotlePagaltzis | 151 | \ illusion |
152 | : Samsara ( -- char ) Dreams Action Meditation ; | ||
1 | GlynWebster | 153 | |
3 | AristotlePagaltzis | 154 | \ life without comments |
155 | 27 CONSTANT Escape | ||
156 | : Acceptance ( char -- flag ) Escape <> ; | ||
157 | : Mutability ( -- flag ) Generation Samsara Acceptance ; | ||
158 | : Goes-On ( -- ) BEGIN Mutability 0= UNTIL ; | ||
1 | GlynWebster | 159 | |
3 | AristotlePagaltzis | 160 | : Life ( -- ) Creation Goes-On ; |
1 | GlynWebster | 161 | |
3 | AristotlePagaltzis | 162 | Life |
1 | GlynWebster | 163 | |
3 | AristotlePagaltzis | 164 | \ 950724 + 970702 + |
165 | </verbatim> |
lib/blame.php:177: Warning: Invalid argument supplied for foreach()