1(define plotter 2 (lambda (fx res x1 x2 y1 y2) 3 (let* ((dx (- x2 x1)) (dy (- y2 y1)) (delta (/ dx res)) 4 (fstr (format "~a" fx)) 5 (f (eval (list 'lambda '(x) fx)))) 6 (letrec 7 ((scaled 8 (lambda (f x y) 9 (f 10 (* res (/ (- x x1) dx)) 11 (* res (/ (- y y1) dy))))) 12 (scaled-d 13 (lambda (f x y xd yd) 14 (f 15 (+ xd (* res (/ (- x x1) dx))) 16 (+ yd (* res (/ (- y y1) dy)))))) 17 (plotit 18 (lambda (x) 19 (scaled draw-line x (f x)) 20 (if (< x x2) (plotit (+ x delta)))))) 21 (draw-color 0 0 0) 22 (draw-font "Helvetica" 12) 23 (scaled draw-move 0 (* 1.1 y2)) (draw-string "y") 24 (scaled draw-move (* 1.1 x2) 0) (draw-string "x") 25 (draw-move 26 (- (/ res 2) 27 (/ (car (string-size fstr "Helvetica" 12)) 2)) 28 (+ 30 res)) 29 (draw-string (format "~a" fstr)) 30 (scaled draw-move 0 y1) 31 (scaled draw-line 0 y2) 32 (scaled-d draw-move 0 y2 -5 -7) 33 (scaled draw-line 0 y2) 34 (scaled-d draw-move 0 y2 +5 -7) 35 (scaled draw-line 0 y2) 36 (scaled draw-move x1 0) 37 (scaled draw-line x2 0) 38 (scaled-d draw-move x2 0 -7 -5) 39 (scaled draw-line x2 0) 40 (scaled-d draw-move x2 0 -7 +5) 41 (scaled draw-line x2 0) 42 (draw-color 255 0 0) 43 (scaled draw-move x1 (f x1)) 44 (plotit x1))))) 45 46(plotter '(* x x x) 70 -5.0 5.0 -50.0 50.0) 47(plotter '(sin x) 50 -5.0 5.0 -1.0 1.0) 48(plotter '(* x (sin x)) 100 -25.0 25.0 -25.0 25.0) 49(plotter '(+ (* x x) (* -5 x) 6) 80 -1.0 5.0 -3.0 10.0) 50