Jump to content

Bell numbers: Difference between revisions

Line 2,630:
=={{header|Racket}}==
 
<lang racket>#lang racket
 
</lang>
(define (build-bell-row previous-row)
(define seed (last previous-row))
(reverse
(let-values (((reversed _) (for/fold ((acc (list seed)) (prev seed))
((pprev previous-row))
(let ((n (+ prev pprev))) (values (cons n acc) n)))))
reversed)))
 
(define reverse-bell-triangle
(let ((memo (make-hash '((0 . ((1)))))))
(λ (rows) (hash-ref! memo
rows
(λ ()
(let ((prev (reverse-bell-triangle (sub1 rows))))
(cons (build-bell-row (car prev)) prev)))))))
 
(define bell-triangle (compose reverse reverse-bell-triangle))
 
(define bell-number (compose caar reverse-bell-triangle))
 
(module+ main
(map bell-number (range 15))
(bell-number 50)
(bell-triangle 10))</lang>
 
{{out}}
 
<pre>'(1 1 2 5 15 52 203 877 4140 21147 115975 678570 4213597 27644437 190899322)
<pre>
185724268771078270438257767181908917499221852770
'((1)
(1 2)
(2 3 5)
(5 7 10 15)
(15 20 27 37 52)
(52 67 87 114 151 203)
(203 255 322 409 523 674 877)
(877 1080 1335 1657 2066 2589 3263 4140)
(4140 5017 6097 7432 9089 11155 13744 17007 21147)
(21147 25287 30304 36401 43833 52922 64077 77821 94828 115975)
(115975 137122 162409 192713 229114 272947 325869 389946 467767 562595 678570))
</pre>
 
569

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.