apfl/examples/mandelbrot.apfl

41 lines
709 B
Text

width := 80
height := 24
maxiter := 100
V+ := { a1::b1 a2::b2 ->
(+ a1 a2)::(+ b1 b2)
}
V* := { a1::b1 a2::b2 ->
(- (* a1 a2) (* b1 b2))::(+ (* a1 b2) (* b1 a2))
}
Vsquared := { x -> V* x x }
Vsquared-abs := { a::b ->
+ (* a a) (* b b)
}
mandel := {
0 _ _ -> true
_ _ _?(has Vsquared-abs > 4) -> false
n c z -> mandel (-- n) c (V+ (Vsquared z) c)
}
mindim := if (< width height) {width} {height}
scale := / 2 mindim
iterdim := { dim body ->
half := / dim 2
for (- half) half { x ->
body (* scale x)
}
}
iterdim height { b ->
line := ""
iterdim width { a ->
line = & line (if (mandel maxiter a::b 0::0) {"#"} {" "})
}
gc 'collect
print line
}