37 lines
1.0 KiB
Scheme
37 lines
1.0 KiB
Scheme
(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))))
|