; Numeric procedures
; Uses: startup

(define > (lambda (n1 n2) (< n2 n1)))
(define <= (lambda (n1 n2) (not (< n2 n1))))
(define >= (lambda (n1 n2) (not (< n1 n2))))

(define abs
  (lambda (n)
    (if (< n 0) (- 0 n) n)))

(define minus (lambda (n) (- 0 n)))

(define even? (lambda (n) (= (remainder n 2) 0)))
(define odd? (lambda (n) (not (even? n))))

(define zero? (lambda (n) (= n 0)))

(define 1+ (lambda (n) (+ n 1)))
(define -1+ (lambda (n) (- n 1)))

(define min (lambda (n1 n2) (if (< n1 n2) n1 n2)))
(define max (lambda (n1 n2) (if (< n1 n2) n2 n1)))

(define expt			; Pre: 0 <= power
  (lambda (base power)
    (if (= power 0)
        1
        (if (even? power)
            (square (expt base (quotient power 2)))
            (* base (expt base (- power 1)))))))

(define square (lambda (n) (* n n)))