clean up code
This commit is contained in:
parent
85db821ad2
commit
7af2f1e11d
piclib
|
@ -1,10 +1,10 @@
|
|||
(import (scheme base)
|
||||
(define-library (picrin syntax-rules)
|
||||
(import (scheme base)
|
||||
(scheme cxr)
|
||||
(picrin macro)
|
||||
(scheme write))
|
||||
(picrin macro))
|
||||
|
||||
;;; utility functions
|
||||
(define (reverse* l)
|
||||
(define (reverse* l)
|
||||
;; (reverse* '(a b c d . e)) => (e d c b a)
|
||||
(let loop ((a '())
|
||||
(d l))
|
||||
|
@ -12,21 +12,21 @@
|
|||
(loop (cons (car d) a) (cdr d))
|
||||
(cons d a))))
|
||||
|
||||
(define (var->sym v)
|
||||
(define (var->sym v)
|
||||
(let loop ((cnt 0)
|
||||
(v v))
|
||||
(if (symbol? v)
|
||||
(string->symbol (string-append (symbol->string v) "/" (number->string cnt)))
|
||||
(loop (+ 1 cnt) (car v)))))
|
||||
|
||||
(define push-var list)
|
||||
(define push-var list)
|
||||
|
||||
(define (every? pred l)
|
||||
(define (every? pred l)
|
||||
(if (null? l)
|
||||
#t
|
||||
(and (pred (car l)) (every? pred (cdr l)))))
|
||||
|
||||
(define (flatten l)
|
||||
(define (flatten l)
|
||||
(cond
|
||||
((null? l) '())
|
||||
((pair? (car l))
|
||||
|
@ -34,8 +34,8 @@
|
|||
(else
|
||||
(cons (car l) (flatten (cdr l))))))
|
||||
|
||||
;;; main function
|
||||
(define-syntax syntax-rules
|
||||
;;; main function
|
||||
(define-syntax syntax-rules
|
||||
(er-macro-transformer
|
||||
(lambda (form r compare)
|
||||
(define _define (r 'define))
|
||||
|
@ -188,7 +188,7 @@
|
|||
#t)
|
||||
vars))))
|
||||
|
||||
;;; compile expand
|
||||
;;; compile expand
|
||||
(define (compile-expand ellipsis reserved template)
|
||||
(letrec ((compile-expand-base
|
||||
(lambda (template ellipsis-valid)
|
||||
|
@ -318,18 +318,4 @@
|
|||
|
||||
`(,_syntax-error "malformed syntax-rules"))))))
|
||||
|
||||
;;; test code
|
||||
(import (scheme write))
|
||||
|
||||
(define-syntax hoge
|
||||
(syntax-rules ()
|
||||
((hoge (a ...) ...) '((a ...) ...))
|
||||
((hoge (a b) ...) '(a ...))
|
||||
((hoge a b ... c . d) 'c)))
|
||||
|
||||
(display (hoge (1 2 3) (3 4 5) (5 6 7)))
|
||||
(newline)
|
||||
(display (hoge (a b) (c d) (e f)))
|
||||
(newline)
|
||||
(display (hoge a b c))
|
||||
(newline)
|
||||
(export syntax-rules))
|
||||
|
|
Loading…
Reference in New Issue