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)
|
((memoizable? var body)
|
||||||
(write `(DEBUG ,var is memoizable))
|
(write `(DEBUG ,var is memoizable))
|
||||||
(newline)
|
(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)
|
exp)
|
||||||
(else exp))))
|
(else exp))))
|
||||||
;((set!? exp)
|
;((set!? exp)
|
||||||
|
@ -208,7 +220,9 @@
|
||||||
(let ((ast (ast:sexp->ast sexp)))
|
(let ((ast (ast:sexp->ast sexp)))
|
||||||
(analyze-cps ast)
|
(analyze-cps ast)
|
||||||
;(analyze:find-recursive-calls ast)
|
;(analyze:find-recursive-calls ast)
|
||||||
(analyze:memoize-pure-fncs ast))
|
(pretty-print
|
||||||
|
(ast:ast->pp-sexp
|
||||||
|
(analyze:memoize-pure-fncs ast))))
|
||||||
|
|
||||||
;; (pretty-print
|
;; (pretty-print
|
||||||
;; (ast:ast->pp-sexp
|
;; (ast:ast->pp-sexp
|
||||||
|
|
60
memo.scm
60
memo.scm
|
@ -37,40 +37,40 @@
|
||||||
; (fib (- n 2)))))
|
; (fib (- n 2)))))
|
||||||
|
|
||||||
; Fast versions:
|
; Fast versions:
|
||||||
;(define ack (memoize _ack))
|
(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)
|
|
||||||
; (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 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 __ack (memoize _ack))
|
|
||||||
__ack
|
|
||||||
)))
|
|
||||||
|
|
||||||
(define fib
|
(define fib (memoize _fib))
|
||||||
((lambda ()
|
(define (_fib n)
|
||||||
(define (_fib n)
|
|
||||||
(if (< n 2)
|
(if (< n 2)
|
||||||
n
|
n
|
||||||
(+ (__fib (- n 1))
|
(+ (fib (- n 1))
|
||||||
(__fib (- n 2)))))
|
(fib (- n 2)))))
|
||||||
(define __fib (memoize _fib))
|
|
||||||
__fib
|
;; 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))
|
(write (ack 3 12))
|
||||||
(newline)
|
(newline)
|
||||||
|
|
Loading…
Add table
Reference in a new issue