Relocated letrec to scheme/base

This commit is contained in:
Justin Ethier 2015-08-21 01:43:51 -04:00
parent c79a96bae7
commit 026eaa6130
2 changed files with 20 additions and 23 deletions

View file

@ -86,7 +86,7 @@
or
let
let*
;letrec
letrec
begin
case
cond
@ -154,18 +154,25 @@
`(,(rename 'let) (,(caar (cdr expr)))
(,(rename 'let*) ,(cdar (cdr expr)) ,@(cddr expr)))
(error "bad let* syntax"))))))
; (define-syntax letrec
; (er-macro-transformer
; (lambda (exp rename compare)
; (let* ((bindings (cadr exp)) ;(letrec->bindings exp)
; (namings (map (lambda (b) (list (car b) #f)) bindings))
; (names (map car (cadr exp))) ;(letrec->bound-vars exp)
; (sets (map (lambda (binding)
; (cons 'set! binding))
; bindings))
; (args (map cadr (cadr exp)))) ;(letrec->args exp)
; `(let ,namings
; (begin ,@(append sets (cddr exp)))))))) ;(letrec->exp exp)
(define-syntax letrec
(er-macro-transformer
(lambda (exp rename compare)
(let* ((bindings (cadr exp)) ;(letrec->bindings exp)
(namings (map (lambda (b) (list (car b) #f)) bindings))
(names (map car (cadr exp))) ;(letrec->bound-vars exp)
(sets (map (lambda (binding)
(cons 'set! binding))
bindings))
(args (map cadr (cadr exp)))) ;(letrec->args exp)
`(let ,namings
(begin ,@(append sets (cddr exp)))))))) ;(letrec->exp exp)
;; NOTE: chibi uses the following macro. turns vars into defines?
;;(define-syntax letrec
;; (er-macro-transformer
;; (lambda (expr rename compare)
;; ((lambda (defs)
;; `((,(rename 'lambda) () ,@defs ,@(cddr expr))))
;; (map (lambda (x) (cons (rename 'define) x)) (cadr expr))))))
(define-syntax begin
(er-macro-transformer
(lambda (exp rename compare)

View file

@ -138,7 +138,6 @@
(define (get-macros) *defined-macros*)
(define *defined-macros*
(list
(cons 'letrec (lambda (exp rename compare) (letrec=>lets+sets exp)))
(cons 'cond-expand
;; Based on the cond-expand macro from Chibi scheme
(lambda (expr rename compare)
@ -931,15 +930,6 @@
(args (letrec->args exp)))
`(let ,namings
(begin ,@(append sets (letrec->exp exp)))))))
;; NOTE: chibi uses the following macro. turns vars into defines?
;;(define-syntax letrec
;; (er-macro-transformer
;; (lambda (expr rename compare)
;; ((lambda (defs)
;; `((,(rename 'lambda) () ,@defs ,@(cddr expr))))
;; (map (lambda (x) (cons (rename 'define) x)) (cadr expr))))))
;;
;; Top-level analysis