This commit is contained in:
Justin Ethier 2019-02-10 18:48:53 -05:00
parent 1caa277f8a
commit a988582228
3 changed files with 22 additions and 22 deletions

View file

@ -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 ()

View file

@ -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)

View file

@ -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))
)
)