Dr.Scheme(ry
(define-macro (local defs . body) (let* ((split-define (lambda (def) (let ((name (cadr def)) (body (cddr def))) (cond [(pair? name) (cons (car name) (list (cons 'lambda (cons (cdr name) body))))] [else (cons name body)])))) (def-pairs (map split-define defs)) (init (map (lambda (p) (list (car p) #f)) def-pairs)) (setup (map (lambda (p) (cons 'set! (cons (car p) (cdr p)))) def-pairs))) (cons 'let (cons init (append setup body)))))
良く見たら,(pair? name)と(list? name)の中身がいっしょだった………orz