; Function plotter
; load memo "Graphic utilities" before

(define (plot f x1 x2 y1 y2)
	(let ((dx (/ (- x2 x1) 160))
		(dy (/ 105 (- y1 y2))))
	(letrec ((iter (lambda (n)
		(if (eqv? n 160) #n
		(let ((x (+ x1 (* n dx))))
		(draw n (tr (f x)))
		(iter (+ n 1))))))
	(tr (lambda (y)
	(integer (* (- y y2) dy)))))
  (cls)
  ; draw x-axis
  (if (< (* y1 y2) 0)
	(begin (set-pattern grey)
	(move 0 (tr 0))
	(draw 159 (tr 0))) #f)
 ; draw y-axis
  (if (< (* x1 x2) 0)
	(let ((x (integer
			 (/ (- x1) dx))))
	(set-pattern grey)
	(move x 0)
	(draw x 104)) #f)
  (set-pattern  #t)
  (move  0 (tr (f x1)))
  (iter 1))))
