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) (write (mfnc 1 1)) (newline)
; Original versions: ; Original versions:
;(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 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)) (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 (memoize _fib))
(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:
;(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 ;; New fast versions that do not introduce any new top-level definitions
;(define ack ;(define ack
; ((lambda () ; ((lambda ()

View file

@ -29,7 +29,7 @@
(define cont #f) (define cont #f)
(define (scan exp return locals) (define (scan exp return locals)
;(trace:error `(DEBUG scan ,(ast:ast->pp-sexp exp))) ;(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 (cond
;; TODO: reject if a lambda is returned ;; TODO: reject if a lambda is returned
((ast:lambda? exp) ((ast:lambda? exp)
@ -133,8 +133,8 @@
(cond (cond
((memoizable? var body) ((memoizable? var body)
(let ((new-var (gensym var))) (let ((new-var (gensym var)))
(write `(DEBUG ,var is memoizable)) ;(write `(DEBUG ,var is memoizable))
(newline) ;(newline)
;; TODO: easy to rename function via gensym. however, also ;; TODO: easy to rename function via gensym. however, also
;; need to inject this into top-level: ;; need to inject this into top-level:
;; (define fib #f) ;; (define fib #f)

View file

@ -1708,12 +1708,12 @@
(let ((new-ast (opt:inline-prims (let ((new-ast (opt:inline-prims
(opt:contract ast) -1))) (opt:contract ast) -1)))
;; Just a hack for now, need to fix beta expand in compiler benchmark ;; Just a hack for now, need to fix beta expand in compiler benchmark
(opt:memoize-pure-fncs
(if (< (length (filter define? new-ast)) 1000) (if (< (length (filter define? new-ast)) 1000)
(opt:beta-expand new-ast) ;; TODO: temporarily disabled, causes problems with massive expansions (opt:beta-expand new-ast) ;; TODO: temporarily disabled, causes problems with massive expansions
;; in compiler benchmark, need to revist how to throttle/limit this ;; in compiler benchmark, need to revist how to throttle/limit this
;; (program size? heuristics? what else??) ;; (program size? heuristics? what else??)
new-ast) new-ast))
TODO: integrate (define (opt:memoize-pure-fncs sexp)
) )
) )