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 }