; pentabonacci numbers
(define (iterate n f . bs)
(let loop ((n n) (b (car bs)) (bs (cdr bs)) (xs '()))
(if (zero? n) (reverse xs)
(let ((new-bs (append bs (list (apply f b bs)))))
(loop (- n 1) (car new-bs) (cdr new-bs) (cons b xs))))))
(display (iterate 30 + 0 1 1 2 4))
OyBwZW50YWJvbmFjY2kgbnVtYmVycwoKKGRlZmluZSAoaXRlcmF0ZSBuIGYgLiBicykKICAobGV0IGxvb3AgKChuIG4pIChiIChjYXIgYnMpKSAoYnMgKGNkciBicykpICh4cyAnKCkpKQogICAgKGlmICh6ZXJvPyBuKSAocmV2ZXJzZSB4cykKICAgICAgKGxldCAoKG5ldy1icyAoYXBwZW5kIGJzIChsaXN0IChhcHBseSBmIGIgYnMpKSkpKQogICAgICAgIChsb29wICgtIG4gMSkgKGNhciBuZXctYnMpIChjZHIgbmV3LWJzKSAoY29ucyBiIHhzKSkpKSkpCgooZGlzcGxheSAoaXRlcmF0ZSAzMCArIDAgMSAxIDIgNCkp