mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-14 08:17:35 +02:00
WIP
This commit is contained in:
parent
411c589133
commit
bb0122ee9b
2 changed files with 47 additions and 33 deletions
|
@ -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
|
||||
|
|
56
memo.scm
56
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)))))
|
||||
|
||||
;; New fast versions that do not introduce any new top-level definitions
|
||||
(define ack
|
||||
((lambda ()
|
||||
(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 __ack (memoize _ack))
|
||||
__ack
|
||||
)))
|
||||
((= n 0) (ack (- m 1) 1))
|
||||
(else (ack (- m 1) (ack m (- n 1))))))
|
||||
|
||||
(define fib
|
||||
((lambda ()
|
||||
(define fib (memoize _fib))
|
||||
(define (_fib n)
|
||||
(if (< n 2)
|
||||
n
|
||||
(+ (__fib (- n 1))
|
||||
(__fib (- n 2)))))
|
||||
(define __fib (memoize _fib))
|
||||
__fib
|
||||
)))
|
||||
(+ (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
|
||||
; )))
|
||||
|
||||
(write (ack 3 12))
|
||||
(newline)
|
||||
|
|
Loading…
Add table
Reference in a new issue