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.
This commit is contained in:
Laria 2024-07-12 23:01:44 +02:00
parent ac130c2f77
commit 267e5bc78d

41
examples/mandelbrot.apfl Normal file
View file

@ -0,0 +1,41 @@
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
}