From a843e06f9a068d033b1ae6094322d2a1a8afa14b Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 6 Feb 2019 14:53:00 -0500 Subject: [PATCH] Memoize all of the functions at top-level --- analyze-pure-fncs.scm | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/analyze-pure-fncs.scm b/analyze-pure-fncs.scm index 0f56e194..37d1d8db 100644 --- a/analyze-pure-fncs.scm +++ b/analyze-pure-fncs.scm @@ -39,7 +39,7 @@ ((quote? exp) exp) ((const? exp) #t) ((ref? exp) - TODO: if exp is a global, return false + TODO: if exp is a global (IE: free var), return false exp) ((define? exp) (return #f)) @@ -170,9 +170,22 @@ (cond ((define? exp) exp) ;; not top-level (else - ;; TODO: fold - ;;(foldl (lambda (exp acc) `(memo (lambda(,(car exp)) ,acc))) '(test) '((a . b) (c . d))) -exp ;; TODO: just using this for debugging! + ;; Memoize all of the functions at top-level + (foldl + (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))) (else new-exp)))