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:
parent
ac130c2f77
commit
267e5bc78d
1 changed files with 41 additions and 0 deletions
41
examples/mandelbrot.apfl
Normal file
41
examples/mandelbrot.apfl
Normal 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
|
||||
}
|
||||
Loading…
Reference in a new issue