mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-15 16:57:35 +02:00
Relocated letrec to scheme/base
This commit is contained in:
parent
c79a96bae7
commit
026eaa6130
2 changed files with 20 additions and 23 deletions
|
@ -86,7 +86,7 @@
|
||||||
or
|
or
|
||||||
let
|
let
|
||||||
let*
|
let*
|
||||||
;letrec
|
letrec
|
||||||
begin
|
begin
|
||||||
case
|
case
|
||||||
cond
|
cond
|
||||||
|
@ -154,18 +154,25 @@
|
||||||
`(,(rename 'let) (,(caar (cdr expr)))
|
`(,(rename 'let) (,(caar (cdr expr)))
|
||||||
(,(rename 'let*) ,(cdar (cdr expr)) ,@(cddr expr)))
|
(,(rename 'let*) ,(cdar (cdr expr)) ,@(cddr expr)))
|
||||||
(error "bad let* syntax"))))))
|
(error "bad let* syntax"))))))
|
||||||
; (define-syntax letrec
|
(define-syntax letrec
|
||||||
; (er-macro-transformer
|
(er-macro-transformer
|
||||||
; (lambda (exp rename compare)
|
(lambda (exp rename compare)
|
||||||
; (let* ((bindings (cadr exp)) ;(letrec->bindings exp)
|
(let* ((bindings (cadr exp)) ;(letrec->bindings exp)
|
||||||
; (namings (map (lambda (b) (list (car b) #f)) bindings))
|
(namings (map (lambda (b) (list (car b) #f)) bindings))
|
||||||
; (names (map car (cadr exp))) ;(letrec->bound-vars exp)
|
(names (map car (cadr exp))) ;(letrec->bound-vars exp)
|
||||||
; (sets (map (lambda (binding)
|
(sets (map (lambda (binding)
|
||||||
; (cons 'set! binding))
|
(cons 'set! binding))
|
||||||
; bindings))
|
bindings))
|
||||||
; (args (map cadr (cadr exp)))) ;(letrec->args exp)
|
(args (map cadr (cadr exp)))) ;(letrec->args exp)
|
||||||
; `(let ,namings
|
`(let ,namings
|
||||||
; (begin ,@(append sets (cddr exp)))))))) ;(letrec->exp exp)
|
(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
|
(define-syntax begin
|
||||||
(er-macro-transformer
|
(er-macro-transformer
|
||||||
(lambda (exp rename compare)
|
(lambda (exp rename compare)
|
||||||
|
|
|
@ -138,7 +138,6 @@
|
||||||
(define (get-macros) *defined-macros*)
|
(define (get-macros) *defined-macros*)
|
||||||
(define *defined-macros*
|
(define *defined-macros*
|
||||||
(list
|
(list
|
||||||
(cons 'letrec (lambda (exp rename compare) (letrec=>lets+sets exp)))
|
|
||||||
(cons 'cond-expand
|
(cons 'cond-expand
|
||||||
;; Based on the cond-expand macro from Chibi scheme
|
;; Based on the cond-expand macro from Chibi scheme
|
||||||
(lambda (expr rename compare)
|
(lambda (expr rename compare)
|
||||||
|
@ -931,15 +930,6 @@
|
||||||
(args (letrec->args exp)))
|
(args (letrec->args exp)))
|
||||||
`(let ,namings
|
`(let ,namings
|
||||||
(begin ,@(append sets (letrec->exp exp)))))))
|
(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
|
;; Top-level analysis
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue