;; defining a few useful functions in mcscheme to extend mcscheme (define null '()) (define empty '()) (define first car) (define (cadr e) (car (cdr e))) (define second cadr) (define rest cdr) (define (add1 x) (+ x 1)) (define (null? x) (eq? x null)) (define (boolean? x) ;; we don't have or :-( (if (eq? x #t) #t (if (eq? x #f) #t #f))) (define (eof-object? x) (eq? x eof)) (define (append l1 l2) (if (null? l1) l2 (cons (car l1) (append (cdr l1) l2)))) (define (reverse l) (define (reverse1 l1 l2) (if (null? l1) l2 (reverse1 (cdr l1) (cons (car l1) l2)))) (reverse1 l null)) (define (length l) (if (null? l) 0 (+ 1 (length (cdr l)))))