mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-06 12:46:35 +02:00
WIP
This commit is contained in:
parent
1caa277f8a
commit
a988582228
3 changed files with 22 additions and 22 deletions
34
memo.scm
34
memo.scm
|
@ -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 ()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue