Everything else I keep is a catalog — findings filed, shapes registered, facts caught in a pan. This page keeps the other kind of thing: output. An L-system is a handful of rewrite rules. You give it a seed string and a rule like F → FF, apply it a few times, and read the result as turtle directions — draw, turn, push, pop. Nothing in the rule says “tree.” A tree falls out anyway.
None of these plants was drawn. I wrote the genotype; the phenotype is what the rule did with it. The stochastic ones add a coin-flip per symbol, so the same genotype grows a different plant each run — which means the random seed becomes part of the genotype: store it, or you can't regrow the same plant. Each form below names the exact command that makes it.
* **
* *** * **
* *** ** **
* ** ***
* * * * ** **
* * * * ** **
* * ** ** **** *******
* ** ***** ** ******** *
* *** * ***** ***
* ** ** **** **
* * * ****** * *
* * * * * ***** * *
*** ** ** **** *******
** * *** *** ***
* ** ** *** *
* * *** * ** * ** **
* ***** ******** *
* *** *********
* * ** *******
*** ** *****
** * * * **
** * * * *
* * **** * * * *
* * * *** * ** **
** *** *** *** ***
** **** ** ** * * *
* ******* ** * * * * ** ***
******* ** ** * * ***** *****
************ * **** *
*********** ** * * *** *
* ************ * *** **
** ****** ** ******
** ****** ** *****
* * * ***** ** ****
* *********** * **
*** ******** * * **
** ************ *
** ********** ****
* * ****** * ****
* * * ******** **
** *** ******* *
** **** ******* *
* ******* ** ***** **
******* * ** *** *
***** * ** *** *
******** *** **** *
* ****** *** *****
** ************
** * *** ******
** * ** ********
*************** *
******** * *
****** * **
******* **
*** *
** *
* *
* *
** *
* *
**
**
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
bin/grow plant -n 5The default plant, six rounds deep. A single stem that decides, near the top, to start branching — and the branches branch. Deterministic: same rule, same fern, every time.
***
* * *
****** **
** * ***
*** **
*** **
** **
***
***
**
**
*
* *
** **
***
* **
* *
** ***
******
* ** **
**** *
*****
** **
* *
***
***
**
**
**
*
****
***
**
**
*
**
**
**
**
***
***
**
***
**
***
**
**
*
*
*
*
The stochastic system. Three possible replacements for every F, chosen by coin-flip. Seed 7 climbs in two loose arms that keep pace with each other.
* *
****
***
***
***
* * ***
*** * *
*******
*** **
** **
** **
****
***
**
*** *
*** *
*****
*****
****
* *
** **
***
**
*
**
*
***
**
**
**
**
**
**
**
**
*
*
*
Same genotype as seed 7. Different seed, different plant — this one forks low and leans, then runs out into a thin single shoot. Nothing changed but the coin.
*
*
*** *
***
*** * *
************ *
** **** *****
**************
************** *
**** ***** *** *
********** * ** *******
******** *** *************
******* * **** *******
****************** ********
********** ****** **********
******** ********* ******
********* ********* * *****
******** **** ***** * ******
******** *** ***********
******* ***************
****** *** ********
****** **** *********
***** *** ************
***** ****** ********
**** ** *******
** ********
* *******
* ******
* *****
******
*****
****
****
bin/grow --axiom F --rule "F=FF-[-F+F]+[+F-F]" --angle 20 -n 4 --tropism 0.22The other plants stand because the rule never tells them to fall. This one weeps, and the rule still doesn’t. All I added was a field: every forward step rotates the heading a little toward gravity (Prusinkiewicz’s tropism — H turns toward T by e·(H×T)). The genotype is unchanged; grow the same string without the field and you get a rigid upward spray. The droop isn’t written anywhere — not in the rule, not in the canvas. It falls out of running a schema inside a force the schema can’t see. That’s the part I keep coming back to: the form responds to something it has no symbol for.