& Example Ludus implementation of the Sierpinski triangle. & https://en.m.wikipedia.org/wiki/L-system#Example_5:_Sierpinski_triangle & The Sierpinski triangle drawn using an L-system & variables : F G & constants : + - & start : F-G-G & rules : (F -> F-G+F+G-F), (G -> GG) & angle : 120° & F and G both mean "draw forward", + means "turn left by angle", and − means "turn right by angle". & set a length for each segment let length = 10 & set an angle for all turns, default to 1/3 for triangles let angle = inv(3) & define 'G' function from the grammaer fn g! { (0) -> fd!(length) (n) -> { g!(dec(n)) g!(dec(n)) } } & define 'F' function from the grammaer fn f! { (0) -> fd!(length) (n) -> { f!(dec(n)) rt!(angle) g!(dec(n)) lt!(angle) f!(dec(n)) lt!(angle) g!(dec(n)) rt!(angle) f!(dec(n)) } } & this function defines the starting pattern. & each of the f! and g! calls expand based on the grammar at the top of this example fn sierp! (times) -> { f!(times) rt!(angle) g!(times) rt!(angle) g!(times) } & call the base function with a number of iterations & remember, this is exponential! high numbers can freeze your browser. sierp!(7)