Skip to content

Instantly share code, notes, and snippets.

@zeptometer
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zeptometer/9781601 to your computer and use it in GitHub Desktop.
Save zeptometer/9781601 to your computer and use it in GitHub Desktop.
;; このsyntax-rulesが
(syntax-rules ()
((let name ((var init) ...) body ...)
((lambda ()
(define (name var ...)
body ...)
(name init ...))))
((let ((var init) ...) body ...)
((lambda (var ...) body ...) init ...)))
;; こう展開されるわけじゃ
(er-macro-transformer@176
(lambda (expr@1459 rename@1460 cmp@1461)
(define (reverse*@1463 l@1462)
((lambda ()
(define loop@1464
(lambda (r@1465 l@1466)
(if (pair?@6 l@1466)
(loop@1464
(cons@7 (car@8 l@1466) r@1465)
(cdr@9 l@1466))
(cons@7 l@1466 r@1465))))
(loop@1464 (car@8 l@1462) (cdr@9 l@1462)))))
((lambda (name/0@1467 var/1@1468 init/1@1469 body/1@1470)
((lambda (result@1471)
(if result@1471
(cons@7
(cons@7
(rename@1460 'lambda)
(cons@7
'()
(cons@7
(cons@7
(rename@1460 'define)
(cons@7
(cons@7
name/0@1467
(append@21
(map@125
(lambda (var/0@1472) var/0@1472)
var/1@1468)
'()))
(append@21
(map@125
(lambda (body/0@1473) body/0@1473)
body/1@1470)
'())))
(cons@7
(cons@7
name/0@1467
(append@21
(map@125
(lambda (init/0@1474) init/0@1474)
init/1@1469)
'()))
'()))))
'())
((lambda (var/1@1475 init/1@1476 body/1@1477)
((lambda (result@1478)
(if result@1478
(cons@7
(cons@7
(rename@1460 'lambda)
(cons@7
(append@21
(map@125
(lambda (var/0@1479) var/0@1479)
var/1@1475)
'())
(append@21
(map@125
(lambda (body/0@1480) body/0@1480)
body/1@1477)
'())))
(append@21
(map@125
(lambda (init/0@1481) init/0@1481)
init/1@1476)
'()))
'(syntax-error no matching pattern)))
(call/cc@141
(lambda (exit@1482)
((lambda (expr@1483)
(begin
(if (pair?@6 expr@1483)
((lambda (expr@1484)
(begin
((lambda (expr@1485)
(begin
((lambda (expr@1486)
(if (not@4 (eqv?@2 '() expr@1486))
(exit@1482 #f)))
(car@8 expr@1485))
((lambda (expr@1487)
((lambda ()
(define loop@1488
(lambda (expr@1489)
(if (not@4 (null?@16 expr@1489))
((lambda (var/0@1490
init/0@1491)
((lambda (expr@1492)
(begin
(if (pair?@6
expr@1492)
((lambda (expr@1493)
(set! var/0@1490
expr@1493))
(car@8 expr@1492))
(exit@1482 #f))
(if (pair?@6
(cdr@9 expr@1492))
(begin
((lambda (expr@1494)
(set! init/0@1491
expr@1494))
(car@8 (cdr@9 expr@1492)))
((lambda (expr@1495)
(if (not@4 (eqv?@2
'()
expr@1495))
(exit@1482
#f)))
(cdr@9 (cdr@9 expr@1492))))
(exit@1482 #f))))
(car@8 expr@1489))
(set! var/1@1475
(cons@7
var/0@1490
var/1@1475))
(set! init/1@1476
(cons@7
init/0@1491
init/1@1476))
(loop@1488
(cdr@9 expr@1489)))
'()
'()))))
(loop@1488 expr@1487))))
(reverse*@1463
(cons@7 '() (cdr@9 expr@1485))))))
(reverse*@1463 expr@1484))))
(car@8 expr@1483))
(exit@1482 #f))
((lambda (expr@1496)
(begin
((lambda (expr@1497)
(if (not@4 (eqv?@2 '() expr@1497))
(exit@1482 #f)))
(car@8 expr@1496))
((lambda (expr@1498)
((lambda ()
(define loop@1499
(lambda (expr@1500)
(if (not@4 (null?@16 expr@1500))
((lambda (body/0@1501)
((lambda (expr@1502)
(set! body/0@1501 expr@1502))
(car@8 expr@1500))
(set! body/1@1477
(cons@7
body/0@1501
body/1@1477))
(loop@1499 (cdr@9 expr@1500)))
'()))))
(loop@1499 expr@1498))))
(reverse*@1463
(cons@7 '() (cdr@9 expr@1496))))))
(reverse*@1463 (cdr@9 expr@1483))))
#t)
(cdr@9 expr@1459))))))
()
()
())))
(call/cc@141
(lambda (exit@1503)
((lambda (expr@1504)
(begin
(if (pair?@6 expr@1504)
((lambda (expr@1505) (set! name/0@1467 expr@1505))
(car@8 expr@1504))
(exit@1503 #f))
(if (pair?@6 (cdr@9 expr@1504))
((lambda (expr@1506)
(begin
((lambda (expr@1507)
(begin
((lambda (expr@1508)
(if (not@4 (eqv?@2 '() expr@1508))
(exit@1503 #f)))
(car@8 expr@1507))
((lambda (expr@1509)
((lambda ()
(define loop@1510
(lambda (expr@1511)
(if (not@4 (null?@16 expr@1511))
((lambda (var/0@1512 init/0@1513)
((lambda (expr@1514)
(begin
(if (pair?@6 expr@1514)
((lambda (expr@1515)
(set! var/0@1512
expr@1515))
(car@8 expr@1514))
(exit@1503 #f))
(if (pair?@6
(cdr@9 expr@1514))
(begin
((lambda (expr@1516)
(set! init/0@1513
expr@1516))
(car@8 (cdr@9 expr@1514)))
((lambda (expr@1517)
(if (not@4 (eqv?@2
'()
expr@1517))
(exit@1503 #f)))
(cdr@9 (cdr@9 expr@1514))))
(exit@1503 #f))))
(car@8 expr@1511))
(set! var/1@1468
(cons@7 var/0@1512 var/1@1468))
(set! init/1@1469
(cons@7 init/0@1513 init/1@1469))
(loop@1510 (cdr@9 expr@1511)))
'()
'()))))
(loop@1510 expr@1509))))
(reverse*@1463 (cons@7 '() (cdr@9 expr@1507))))))
(reverse*@1463 expr@1506))))
(car@8 (cdr@9 expr@1504)))
(exit@1503 #f))
((lambda (expr@1518)
(begin
((lambda (expr@1519)
(if (not@4 (eqv?@2 '() expr@1519))
(exit@1503 #f)))
(car@8 expr@1518))
((lambda (expr@1520)
((lambda ()
(define loop@1521
(lambda (expr@1522)
(if (not@4 (null?@16 expr@1522))
((lambda (body/0@1523)
((lambda (expr@1524)
(set! body/0@1523 expr@1524))
(car@8 expr@1522))
(set! body/1@1470
(cons@7 body/0@1523 body/1@1470))
(loop@1521 (cdr@9 expr@1522)))
'()))))
(loop@1521 expr@1520))))
(reverse*@1463 (cons@7 '() (cdr@9 expr@1518))))))
(reverse*@1463 (cdr@9 (cdr@9 expr@1504)))))
#t)
(cdr@9 expr@1459))))))
()
()
()
())))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment