17 lines
744 B
Racket
17 lines
744 B
Racket
#lang racket
|
|
(define ! (let ((rv# (make-hash))) (λ (n) (hash-ref! rv# n (λ () (if (= n 0) 1 (* n (! (- n 1)))))))))
|
|
|
|
(define (!n n)
|
|
;; note that in-range n is from 0 to n-1 inclusive
|
|
(for/sum ((k (in-range n))) (! k)))
|
|
|
|
(define (dnl. s) (for-each displayln s))
|
|
(dnl
|
|
"Display the left factorials for:"
|
|
"zero through ten (inclusive)"
|
|
(pretty-format (for/list ((i (in-range 0 (add1 10)))) (!n i)))
|
|
"20 through 110 (inclusive) by tens"
|
|
(pretty-format (for/list ((i (in-range 20 (add1 110) 10))) (!n i)))
|
|
"Display the length (in decimal digits) of the left factorials for:"
|
|
"1,000, 2,000 through 10,000 (inclusive), by thousands."
|
|
(pretty-format (for/list ((i (in-range 1000 10001 1000))) (add1 (order-of-magnitude (!n i))))))
|