Memoize all of the functions at top-level

This commit is contained in:
Justin Ethier 2019-02-06 14:53:00 -05:00
parent 4ac9b64bc2
commit a843e06f9a

View file

@ -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)))