; Standard library (define (abs n) (if (real? n) (if (>= n 0) n (- n)) (magnitude n))) (define (expt b n) (define (iex k) (cond ((eq? k 0) 1) ((odd? k) (* b (iex (- k 1)))) (else (let ((h (iex (/ k 2)))) (* h h))))) (if (and (integer? n) (>= n 0)) (iex n) (exp (* n (log b))))) (define (for-each f l) (if (null? l) #n (begin (f (car l)) (for-each f (cdr l))))) (define (input prompt) (string->object (input-string prompt))) (define (input-string prompt) (frm-popup 9993 (lambda (e . a) (case e ((frm-open) (fld-set-text 9301 prompt) (frm-set-focus 9302)) ((ctl-select) (case (car a) ((9303) (frm-return (fld-get-text 9302))) ((9304) (error "Interrupted")))) (else #f))))) (define (map f l) (letrec ((result (cons '() '())) (helper (lambda (p l) (cond ((null? l) p) (else (set-cdr! p (cons (f (car l)) '())) (helper (cdr p) (cdr l))))))) (helper result l) (cdr result))) (define (max n . l) (if (null? l) n (let ((m (apply max l))) (if (<= n m) m n)))) (define (min n . l) (if (null? l) n (let ((m (apply min l))) (if (<= n m) n m)))) (define (modulo a b) (let ((r (remainder a b))) (if (or (eqv? r 0) (eq? (> r 0) (> b 0))) r (+ r b)))) (define (negative? x) (< x 0)) (define (port? p) (or (input-port? p) (output-port? p))) (define (positive? x) (> x 0)) (define (wait-pen) (let ((e (event #t))) (if (and (pair? e) (eq? (car e) 'pen-down)) (cons (cadr e) (caddr e)) (wait-pen)))) (define (zero? x) (eqv? x 0))