(define (assert a b) (cond ((equal? a b) (display "[ok]")) (else (display "[error] ") (display a) (display " != ") (display b))) (newline)) (define (gcd a b) (if (= b 0) (abs a) (gcd b (remainder a b)))) (define (average a b) (/ (+ a b) 2.0)) (define (id n) n) (define identity id) (define (inc n) (+ n 1)) (define nil '()) (define (divides? a b) (= (remainder b a) 0)) (define (cube n) (* n n n)) (define (even? n) (= (remainder n 2) 0)) (define (odd? n) (= (remainder n 2) 1)) ; copied prime? from 1.21 (define (find-divisor n test-divisor) (cond ((> (square test-divisor) n) n) ((divides? test-divisor n) test-divisor) (else (find-divisor n (+ test-divisor 1))))) (define (smallest-divisor n) (find-divisor n 2)) (define (prime? n) (if (= n 1) #f (= n (smallest-divisor n)))) ; https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-15.html (define (enumerate-interval low high) (if (> low high) nil (cons low (enumerate-interval (+ low 1) high))))