This commit is contained in:
Justin Ethier 2019-02-05 18:35:41 -05:00
parent 411c589133
commit bb0122ee9b
2 changed files with 47 additions and 33 deletions

View file

@ -126,6 +126,18 @@
((memoizable? var body)
(write `(DEBUG ,var is memoizable))
(newline)
;; TODO: easy to rename function via gensym. however, also
;; need to inject this into top-level:
;; (define fib #f)
;; and wrap top-level portion with
;; (memoize
;; (lambda-22
;; (r$78)
;; (Cyc-seq
;; (set-global! ack r$78)
;; .. existing top-level goes here
;; ))
;; _ack)
exp)
(else exp))))
;((set!? exp)
@ -208,7 +220,9 @@
(let ((ast (ast:sexp->ast sexp)))
(analyze-cps ast)
;(analyze:find-recursive-calls ast)
(analyze:memoize-pure-fncs ast))
(pretty-print
(ast:ast->pp-sexp
(analyze:memoize-pure-fncs ast))))
;; (pretty-print
;; (ast:ast->pp-sexp

View file

@ -37,40 +37,40 @@
; (fib (- n 2)))))
; Fast versions:
;(define ack (memoize _ack))
;(define (_ack m n)
; (cond ((= m 0) (+ n 1))
; ((= n 0) (ack (- m 1) 1))
; (else (ack (- m 1) (ack m (- n 1))))))
;
;(define fib (memoize _fib))
;(define (_fib n)
; (if (< n 2)
; n
; (+ (fib (- n 1))
; (fib (- n 2)))))
(define ack (memoize _ack))
(define (_ack m n)
(cond ((= m 0) (+ n 1))
((= n 0) (ack (- m 1) 1))
(else (ack (- m 1) (ack m (- n 1))))))
(define fib (memoize _fib))
(define (_fib n)
(if (< n 2)
n
(+ (fib (- n 1))
(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
)))
;(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))
(newline)