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.
41 lines
705 B
Text
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
|
|
}
|