From bb0122ee9bf80358158d061bd1f8f95978b49f06 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 5 Feb 2019 18:35:41 -0500 Subject: [PATCH] WIP --- analyze-pure-fncs.scm | 16 ++++++++++- memo.scm | 64 +++++++++++++++++++++---------------------- 2 files changed, 47 insertions(+), 33 deletions(-) diff --git a/analyze-pure-fncs.scm b/analyze-pure-fncs.scm index fa9000c7..f3b34614 100644 --- a/analyze-pure-fncs.scm +++ b/analyze-pure-fncs.scm @@ -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 diff --git a/memo.scm b/memo.scm index 66de1275..bc40e25a 100644 --- a/memo.scm +++ b/memo.scm @@ -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)