30 lines
855 B
Scheme
30 lines
855 B
Scheme
(define (A m n)
|
|
(letrec ((A-stream
|
|
(cons-stream
|
|
(ints-from 1) ;; m = 0
|
|
(cons-stream
|
|
(ints-from 2) ;; m = 1
|
|
(cons-stream
|
|
;; m = 2
|
|
(stream-map (lambda (n)
|
|
(1+ (* 2 (1+ n))))
|
|
(ints-from 0))
|
|
(cons-stream
|
|
;; m = 3
|
|
(stream-map (lambda (n)
|
|
(- (knuth-up-arrow 2 (- m 2) (+ n 3)) 3))
|
|
(ints-from 0))
|
|
;; m = 4...
|
|
(stream-tail A-stream 3)))))))
|
|
(stream-ref (stream-ref A-stream m) n)))
|
|
|
|
(define (ints-from n)
|
|
(letrec ((ints-rec (cons-stream n (stream-map 1+ ints-rec))))
|
|
ints-rec))
|
|
|
|
(define (knuth-up-arrow a n b)
|
|
(let loop ((n n) (b b))
|
|
(cond ((= b 0) 1)
|
|
((= n 1) (expt a b))
|
|
(else (loop (-1+ n) (loop n (-1+ b)))))))
|