diff --git a/memo.scm b/memo.scm index bc40e25a..bea55409 100644 --- a/memo.scm +++ b/memo.scm @@ -26,30 +26,30 @@ (write (mfnc 1 1)) (newline) ; Original versions: -;(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 n) -; (if (< n 2) -; n -; (+ (fib (- n 1)) -; (fib (- n 2))))) - -; Fast versions: -(define ack (memoize _ack)) -(define (_ack m n) +(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) +(define (fib n) (if (< n 2) n (+ (fib (- n 1)) (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))))) +; ;; New fast versions that do not introduce any new top-level definitions ;(define ack ; ((lambda () diff --git a/scheme/cyclone/cps-opt-memoize-pure-fncs.scm b/scheme/cyclone/cps-opt-memoize-pure-fncs.scm index b07ac358..c0e35bc2 100644 --- a/scheme/cyclone/cps-opt-memoize-pure-fncs.scm +++ b/scheme/cyclone/cps-opt-memoize-pure-fncs.scm @@ -29,7 +29,7 @@ (define cont #f) (define (scan exp return locals) ;(trace:error `(DEBUG scan ,(ast:ast->pp-sexp exp))) - (write `(DEBUG scan ,var ,cont ,(ast:ast->pp-sexp exp))) (newline) + ;(write `(DEBUG scan ,var ,cont ,(ast:ast->pp-sexp exp))) (newline) (cond ;; TODO: reject if a lambda is returned ((ast:lambda? exp) @@ -133,8 +133,8 @@ (cond ((memoizable? var body) (let ((new-var (gensym var))) - (write `(DEBUG ,var is memoizable)) - (newline) + ;(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) diff --git a/scheme/cyclone/cps-optimizations.sld b/scheme/cyclone/cps-optimizations.sld index ce11a4a0..6a14fe60 100644 --- a/scheme/cyclone/cps-optimizations.sld +++ b/scheme/cyclone/cps-optimizations.sld @@ -1708,12 +1708,12 @@ (let ((new-ast (opt:inline-prims (opt:contract ast) -1))) ;; Just a hack for now, need to fix beta expand in compiler benchmark + (opt:memoize-pure-fncs (if (< (length (filter define? new-ast)) 1000) (opt:beta-expand new-ast) ;; TODO: temporarily disabled, causes problems with massive expansions ;; in compiler benchmark, need to revist how to throttle/limit this ;; (program size? heuristics? what else??) - new-ast) -TODO: integrate (define (opt:memoize-pure-fncs sexp) + new-ast)) ) )