summaryrefslogtreecommitdiff
path: root/examples/mandelbrot.lali
diff options
context:
space:
mode:
Diffstat (limited to 'examples/mandelbrot.lali')
-rw-r--r--examples/mandelbrot.lali30
1 files changed, 30 insertions, 0 deletions
diff --git a/examples/mandelbrot.lali b/examples/mandelbrot.lali
new file mode 100644
index 0000000..d546f4f
--- /dev/null
+++ b/examples/mandelbrot.lali
@@ -0,0 +1,30 @@
+(defun for (from to func)
+ (cond ((< from to) (func from) (for (+ from 1) to func))))
+
+(set 'mandelbrot-chars
+ (list " " "." "," "`" "'" "\"" ":" ";" "-" "+" "o" "O" "0" "1"
+ "2" "3" "4" "5" "6" "7" "8" "9" "%" "*" "&" "$" "@" "#"))
+
+(defun mandelbrot-iter (x y x0 y0 i)
+ (fill ((! i 28) " ")
+ ((not (> (+ (* x0 x0) (* y0 y0)) 4)) (nth i mandelbrot-chars))
+ (f (mandelbrot-iter x y
+ (+ (- (* x0 x0) (* y0 y0)) x) (+ (* 2 x0 y0) y)
+ (+ i 1)))))
+
+(defun mandelbrot-char (x y)
+ (mandelbrot-iter x y
+ (+ (- (* x x) (* y y)) x) (+ (* 2 x y) y)
+ 0))
+
+(defun mandelbrot (xmin xmax ymin ymax)
+ (for 0 24 (lambda (py)
+ (for 0 80 (lambda (px)
+ (princ
+ (mandelbrot-char
+ (+ (* (/ px 80) (- xmax xmin)) xmin)
+ (+ (* (/ py 24) (- ymax ymin)) ymin)))))
+ (newline))))
+
+(mandelbrot -2.15 1.25 -1.25 1.25)
+; (mandelbrot -1.5 -1.1 -0.2 0.1)