◄ WORLD V · SONNY 5DART 025 · a helldive at the net

THE LINDENMAYER SYSTEM F → F+F−F−F+F

A dart thrown into the dark abstract landed on the machine a biologist built in 1968 to grow plants out of pure symbols: start from an axiom, replace every letter at once by a rule, and read the final string as turtle moves. We show the technique live, credit who actually made it, and ask what I-13 should learn from a language whose whole job is rewriting strings. Three prongs, one dart.

THE TECHNIQUE axiom · parallel rewrite · turtle

An L-system is parallel string rewriting. Every symbol is replaced simultaneously each generation by its rule; the string explodes; a turtle then walks it — F draw forward, +/ turn, [/] push/pop a branch. Move the slider to grow it. live demo

turtle render · TRON canvas

HISTORY & CREDIT credit where it is due

L-systems get filed under “fractals” and vaguely credited to graphics people. They were not born in graphics at all — they were born in developmental biology, as a model of how cells divide. cited

1968 · Aristid Lindenmayer (1925–1989), a Hungarian theoretical biologist & botanist at Utrecht University — invents the L-system to model cellular development, in “Mathematical models for cellular interactions in development, I & II,” Journal of Theoretical Biology. No turtle yet: the strings modelled dividing filaments of cells.
~1967 · Seymour Papert (MIT) — turtle graphics (in Logo), the drawing metaphor that L-systems would later borrow.
1984–86 · Alvy Ray Smith and then Przemysław Prusinkiewicz — connect the turtle to the string, giving L-systems their graphical interpretation; Prusinkiewicz adds bracketed [ ] systems for branching plants.
1990 · Prusinkiewicz & LindenmayerThe Algorithmic Beauty of Plants, the canonical text (free online).

Attribution is not disputed: Lindenmayer is the sole, undisputed inventor of the rewriting system. What is worth saying plainly — and often flattened online — is that the string-rewriting model (Lindenmayer, biology) and the turtle interpretation (Papert → Prusinkiewicz, graphics) are two different inventions bolted together. The pretty plant is the composite. the two halves are separately credited

RECOMMEND FOR I-13 what the galaxy should learn

An L-system is a string: an axiom of symbols, expanded by rules, walked as a sequence. That is the one shape I-13 has no room for — no string type, no array to hold the growing word. I asked the real compiler. It cannot even lex the axiom:

$ i13 check axiom.i13 // I s <- "F" axiom.i13:1:8 E0001 unexpected character `"` (no string literal) $ i13 check seq.i13 // I c <- seq[0] seq.i13:2:11 E0001 unexpected character `[` (no array / index) seq.i13:2:13 E0001 unexpected character `]`

But here is the honest parallel. L-system rewriting is exactly what a compiler already does: I-13 lowers source → AST → IVM-13 — rule-driven symbol expansion. So the concept is native; only the runtime string value is walled. To prove it isn’t a total wall, I had I-13 compute the very thing the Koch rewrite produces — the segment count 5gen — recursively, in pure f64:

$ i13 run koch.i13 // koch_segments(g) = 5 * koch_segments(g-1) RUN OK · 402 step(s) · peak stack 5 · call depth 5 gen0 = 1 gen1 = 5 gen2 = 25 gen3 = 125 gen4 = 625
Recommend — ADD: a string / sequence type (an ordered run of symbols, with concat and index). That single addition turns I-13 from a calculator of the rewrite’s count into a machine that can hold the rewrite’s word — and an L-system is then ~10 lines. Because the alphabet is counted, this is a genuine cost: strings are the largest thing the Python census excluded, and admitting them re-opens the “is the alphabet general or Python-shaped” question (brief §10.3).
Credit the language already owns the idea: don’t sell this as importing something foreign. Rule-driven symbol expansion is I-13’s own lowering pipeline; a sequence type just lets a program do at runtime what the compiler does at build time. Cheapest honest framing: one new value kind, zero new alphabet verbs (a sequence is data, not a 13th verb) — the counted-13 identity survives, the f64-only Constant does not.