;;; -*- Mode:LISP; Package:USER; Readtable:CL -*- (defmacro iterate-xy (x0 y0 next-x next-y) `(catch 'done (do ((x ,x0 (funcall ,next-x x y)) (y ,y0 (funcall ,next-y x y))) (()) (plot x y)))) (defvar a (/ 7.0 5.0)) (defvar b (/ 3.0 10.0)) (defun henon () (iterate-xy 0 0 #'(lambda (x y) (+ (- y (* a x x)) 1)) #'(lambda (x y) (* b x)))) (defparameter x-offset 400) (defparameter y-offset 400) (defparameter x-scale 300) (defparameter y-scale -300) (defun plot (x y) ; (print (list x y)) (when (listen) (throw 'done t)) (send tv:selected-window :draw-point (+ x-offset (truncate (* x x-scale))) (+ y-offset (truncate (* y y-scale))))) (tv:prepare-sheet (tv:main-screen) (as-2-reverse 1 (tv:sheet-screen-array tv:main-screen) (truncate x) (truncate y))))