ludus-scripts/sierp.ld

56 lines
1.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

& 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(1)
& 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)