Math functions
Below are a few mathematical functions for computing the factorial decomposition of an integer, for determining whether a number is a prime number as well as for computing the factorial and the n-th fibonacci number.
;; Returns the factorial decomposition of integer `n` in form of a list of prime numbers
(define (factors n)
(cond ((negative? n) (cons -1 (factors (- n))))
((< n 3) (list n))
((even? n) (cons 2 (factors (/ n 2))))
(else (let loop ((divisor 3) (n n))
(if (> (square divisor) n)
(list n)
(if (zero? (modulo n divisor))
(cons divisor (loop divisor (/ n divisor)))
(loop (+ divisor 2) n)))))))
;; Returns `#t` if integer `n` is a prime number, `#f` otherwise.
(define (prime? n)
(cond ((= n 0) #f)
((= n 1) #f)
((= n 2) #t)
((even? n) #f)
(else (let loop ((d 3))
(cond ((> (square d) n) #t)
((zero? (remainder n d)) #f)
(else (loop (+ d 2))))))))
;; Returns the `n`-th Fibonacci number
(define (fib n)
(if (fx< n 2)
n
(fx+ (fib (fx1- n)) (fib (fx- n 2)))))
;; Returns the factorial of integer `n`
(define (fac n)
(if (= n 0)
1
(* n (fac (- n 1)))))