; Utility library
(define (filter f l)
	(if (null? l) '()
	(let ((x (car l))
		(r (filter f (cdr l))))
	(if (f x) (cons x r) r))))
(define (nan? x) 
	(not (or (<= x 0) (<= 0 x))))
(define (inf? x)
	(and (not (eqv? x 0))
		(eqv? x (* x 2))))
(define (range l u) (if (> l u) '()
	(cons l (range (+ l 1) u))))
(define (do-range p l u) 
  (letrec ((h (lambda (i) 
    (if (> i u) #n
	(begin (p i) (h  (+ i 1)))))))
  (h l)))
