Created
November 14, 2014 02:58
-
-
Save SaitoAtsushi/967e3fad2b136f3da3f3 to your computer and use it in GitHub Desktop.
Gauche と Scheme で結果が異なる。 ネストしている箇所の処理に何か違いが…?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(define (traverse proc obj) | |
(let loop ((obj obj)) | |
(cond ((or (identifier? obj) (symbol? obj)) | |
(proc obj)) | |
((pair? obj) | |
(cons (loop (car obj)) (loop (cdr obj)))) | |
((vector? obj) | |
(vector-map loop obj)) | |
(else obj)))) | |
(define-syntax let/scope | |
(er-macro-transformer | |
(lambda(form rename _) | |
(let ((scope (cadr form)) | |
(body (cddr form))) | |
`(let-syntax ((,scope | |
(,(rename 'er-macro-transformer) | |
(,(rename 'lambda) (f r _) | |
(,(rename 'let) ((form2 (,(rename 'cdr) f))) | |
(,(rename 'cons) | |
',(rename 'begin) | |
(,(rename 'traverse) r form2))))))) | |
,@body))))) | |
(let ((x 1)) | |
(let/scope scope-1 | |
(let ((x 2)) | |
(let/scope scope-2 | |
(let ((x 3)) | |
(let/scope scope-1 | |
(let ((x 4)) | |
(display (scope-2 (scope-1 x))) | |
(display (scope-2 x)) | |
(display (scope-1 x)) | |
(display x)))))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment