This commit is contained in:
Justin Ethier 2016-07-16 22:03:54 -04:00
parent 84461c0b81
commit cf7fd6d782

View file

@ -1,41 +0,0 @@
(import (scheme base) (scheme write))
;;; Fails when compiling compiler benchmark:
;(define (proper-length l)
; (define (length l n)
; (cond ((pair? l) (length (cdr l) (+ n 1))) ((null? l) n) (else #f)))
; (length l 0))
;
;
;;; One possible idea, alpha conversion could maintain a local lexical environment, "locals"
;;; and use that to rename identifiers that clash with primitives.
;;; Might be able to use a list of hash tables (or alists) for this purpose.
;;; Just load up a new list when a new scope is encountered, and add any
;;; "define", "set!", or "lambda" variables to it. then if a ref is a
;;; local, we need to rename it
;;; TODO: can we use same environments as "eval" uses for this? makes
;;; sense not to reinvent things
;
;(write (proper-length '(a b c)))
;; Seems graphs is timing out, possibly due to too many mutations
;; in its loops. see "set!" introduced by macro expansion below:
(define size 10)
(let loop ((i 1))
(if (< i size)
(begin (write i) (loop (+ i 1)))))
;; Current macro expansion
(newline)
((lambda (i)
((lambda (loop)
(set! loop
(lambda (i)
(if (< i size)
((lambda () (write i) (loop (+ i 1))))
#f)))
(loop i))
#f))
1)