apfl/examples/mandelbrot.apfl
Laria Carolin Chabowski 267e5bc78d Examples: Add mandelbrot.apfl
It's a nice little benchmark. At the moment we need to manually call the
garbage collection, otherwise it eats too much memory and takes forever.
The goal is to be able to remove this call and it not wasting too much
memory.
2024-07-12 23:01:44 +02:00

41 lines
705 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))
}
Vsqared := { x -> V* x x }
Vsqared-abs := { a::b ->
+ (* a a) (* b b)
}
mandel := {
0 _ _ -> true
_ _ _?(has Vsqared-abs > 4) -> false
n c z -> mandel (-- n) c (V+ (Vsqared 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
}