mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-09 22:17:33 +02:00
Memoize all of the functions at top-level
This commit is contained in:
parent
4ac9b64bc2
commit
a843e06f9a
1 changed files with 17 additions and 4 deletions
|
@ -39,7 +39,7 @@
|
||||||
((quote? exp) exp)
|
((quote? exp) exp)
|
||||||
((const? exp) #t)
|
((const? exp) #t)
|
||||||
((ref? exp)
|
((ref? exp)
|
||||||
TODO: if exp is a global, return false
|
TODO: if exp is a global (IE: free var), return false
|
||||||
exp)
|
exp)
|
||||||
((define? exp)
|
((define? exp)
|
||||||
(return #f))
|
(return #f))
|
||||||
|
@ -170,9 +170,22 @@
|
||||||
(cond
|
(cond
|
||||||
((define? exp) exp) ;; not top-level
|
((define? exp) exp) ;; not top-level
|
||||||
(else
|
(else
|
||||||
;; TODO: fold
|
;; Memoize all of the functions at top-level
|
||||||
;;(foldl (lambda (exp acc) `(memo (lambda(,(car exp)) ,acc))) '(test) '((a . b) (c . d)))
|
(foldl
|
||||||
exp ;; TODO: just using this for debugging!
|
(lambda (var/new-var acc)
|
||||||
|
(let ((rsym (gensym 'r))
|
||||||
|
(var (car var/new-var))
|
||||||
|
(new-var (cdr var/new-var)))
|
||||||
|
`(memoize
|
||||||
|
(,(gensym 'lambda)
|
||||||
|
(,rsym)
|
||||||
|
(Cyc-seq
|
||||||
|
(set-global! ,var ,rsym)
|
||||||
|
,acc
|
||||||
|
))
|
||||||
|
,new-var)))
|
||||||
|
exp
|
||||||
|
memo-tbl)
|
||||||
)))
|
)))
|
||||||
new-exp)))
|
new-exp)))
|
||||||
(else new-exp)))
|
(else new-exp)))
|
||||||
|
|
Loading…
Add table
Reference in a new issue