a buggy concatenative turtle (mobilis terrapin)

Requires javascript and <canvas> support (Safari,Opera,Firefox?). Userproofing not included.

My Opera can't hack matrix changes while drawing — if you don't see any output, enable


pen toggle pen up/down
mirror toggle left/right
reverse toggle forward/back
turn X rotate X degrees
forward X translate X units
scale X multiply unit size
repeat N [ ] repeat a plan N times
poly N [ ] repeat with implicit turning
within [ ] [ ] sandwich a plan
(within a b == a b a)
inverse [ ] produce the opposite of a plan
(inverse a == a-1)
under [ ] [ ] make a do/undo sandwich
(under a b == a b a-1)
flip NAME switch argument order
(flip f b a == f a b)
def NAME [ ] define a subplan
(sorry, no arguments)
repeat 4 [ forward 100 turn 90 ]

poly 6 [ poly 36 [ reverse pen forward 20 ] ]

def spot [ poly 6 [ forward 10 ] ]
def arm [ under [ forward 70 turn -60 ] ]
poly 12 [ arm spot ]

def coil [ repeat 300 [ turn 5 forward 5 scale .99 ] ]
def branch [ flip under [ ] ]
poly 2 [ branch coil ]

def jog [ forward 30 under [ turn 45 ] [ forward 10 ] ]
def joggle [ under jog reverse reverse ]
poly 6 [ poly 5 joggle ]

def t [ turn 90 ]
def f [ forward 60 ]
def h [ forward 30 ]
def x [ under [ under t f ] h ]

def u [ under t f h ]
def q [ under [ repeat 2 u ] ]
def w [ under [ repeat 1 u ] ]
def e [ under [ repeat 0 u ] ]

poly 4 [ q [
poly 4 [ w [
poly 4 [ e [
x inverse x
] ] ] ] ] ]