mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-24 04:25:06 +02:00
Memoized functions that do not require new top-level definitions
This commit is contained in:
parent
20ee239b59
commit
411c589133
1 changed files with 31 additions and 9 deletions
40
memo.scm
40
memo.scm
|
@ -26,15 +26,15 @@
|
||||||
(write (mfnc 1 1)) (newline)
|
(write (mfnc 1 1)) (newline)
|
||||||
|
|
||||||
; Original versions:
|
; Original versions:
|
||||||
(define (ack m n)
|
;(define (ack m n)
|
||||||
(cond ((= m 0) (+ n 1))
|
; (cond ((= m 0) (+ n 1))
|
||||||
((= n 0) (ack (- m 1) 1))
|
; ((= n 0) (ack (- m 1) 1))
|
||||||
(else (ack (- m 1) (ack m (- n 1))))))
|
; (else (ack (- m 1) (ack m (- n 1))))))
|
||||||
(define (fib n)
|
;(define (fib n)
|
||||||
(if (< n 2)
|
; (if (< n 2)
|
||||||
n
|
; n
|
||||||
(+ (fib (- n 1))
|
; (+ (fib (- n 1))
|
||||||
(fib (- n 2)))))
|
; (fib (- n 2)))))
|
||||||
|
|
||||||
; Fast versions:
|
; Fast versions:
|
||||||
;(define ack (memoize _ack))
|
;(define ack (memoize _ack))
|
||||||
|
@ -50,6 +50,28 @@
|
||||||
; (+ (fib (- n 1))
|
; (+ (fib (- n 1))
|
||||||
; (fib (- n 2)))))
|
; (fib (- n 2)))))
|
||||||
|
|
||||||
|
;; New fast versions that do not introduce any new top-level definitions
|
||||||
|
(define ack
|
||||||
|
((lambda ()
|
||||||
|
(define (_ack m n)
|
||||||
|
(cond ((= m 0) (+ n 1))
|
||||||
|
((= n 0) (__ack (- m 1) 1))
|
||||||
|
(else (__ack (- m 1) (__ack m (- n 1))))))
|
||||||
|
(define __ack (memoize _ack))
|
||||||
|
__ack
|
||||||
|
)))
|
||||||
|
|
||||||
|
(define fib
|
||||||
|
((lambda ()
|
||||||
|
(define (_fib n)
|
||||||
|
(if (< n 2)
|
||||||
|
n
|
||||||
|
(+ (__fib (- n 1))
|
||||||
|
(__fib (- n 2)))))
|
||||||
|
(define __fib (memoize _fib))
|
||||||
|
__fib
|
||||||
|
)))
|
||||||
|
|
||||||
(write (ack 3 12))
|
(write (ack 3 12))
|
||||||
(newline)
|
(newline)
|
||||||
(write (fib 40))
|
(write (fib 40))
|
||||||
|
|
Loading…
Add table
Reference in a new issue