Fixed a bug with a forgotten :acc.
Inlined the in-file bindings, with the risk of exposing it to a misguided set!.
This commit is contained in:
parent
c53a08c769
commit
093d1319d9
1 changed files with 5 additions and 28 deletions
|
@ -113,8 +113,7 @@
|
|||
((elts (map car pairs))
|
||||
(succ (map step pairs)))
|
||||
()
|
||||
. rest))
|
||||
))
|
||||
. rest))))
|
||||
|
||||
(define-syntax define-in-indexed
|
||||
(syntax-rules ()
|
||||
|
@ -154,8 +153,6 @@
|
|||
. rest))
|
||||
))
|
||||
|
||||
;;> \macro{(for ch (in-port [input-port [reader [eof?]]]))}
|
||||
|
||||
(define-syntax in-port
|
||||
(syntax-rules ()
|
||||
((in-port ((var) source) next . rest)
|
||||
|
@ -167,16 +164,14 @@
|
|||
((in-port ((var p) (port read-char)) next . rest)
|
||||
(in-port ((var p) (port read-char eof-object?)) next . rest))
|
||||
((in-port ((var p) (port reader eof?)) next . rest)
|
||||
(next ((p port) (r reader) (e? eof?))
|
||||
(next ((p port))
|
||||
()
|
||||
((var (r p) (r p)))
|
||||
((e? var))
|
||||
((var (reader p) (reader p)))
|
||||
((eof? var))
|
||||
()
|
||||
()
|
||||
. rest))))
|
||||
|
||||
;; ;;> \macro{(for ch (in-file [input-port [reader [eof?]]]))}
|
||||
|
||||
(define-syntax in-file
|
||||
(syntax-rules ()
|
||||
((in-file ((var) source) next . rest)
|
||||
|
@ -193,7 +188,6 @@
|
|||
()
|
||||
((close-input-port p)) . rest))))
|
||||
|
||||
|
||||
(define-syntax in-generator
|
||||
(syntax-rules ()
|
||||
((_ ((var) (source)) next . rest)
|
||||
|
@ -205,8 +199,6 @@
|
|||
()
|
||||
. rest))))
|
||||
|
||||
;;> \macro{(for x (up-from [start] [(to limit)] [(by step)]))}
|
||||
|
||||
(define-syntax up-from
|
||||
(syntax-rules (to by)
|
||||
((up-from (() . args) next . rest)
|
||||
|
@ -232,8 +224,6 @@
|
|||
((up-from ((var) (start limit)) next . rest)
|
||||
(up-from ((var) (start limit 1)) next . rest))))
|
||||
|
||||
;;> \macro{(for x (down-from [start] [(to limit)] [(by step)]))}
|
||||
|
||||
(define-syntax down-from
|
||||
(syntax-rules (to by)
|
||||
((down-from (() . args) next . rest)
|
||||
|
@ -293,17 +283,12 @@
|
|||
(folding ((var) (init update (if #t))) n . rest))
|
||||
((_ :acc ((var) (init)) n . rest)
|
||||
(folding ((var) (init var (if #t))) n . rest))))
|
||||
|
||||
|
||||
;;> \macro{(for x [pair] (listing expr))}
|
||||
|
||||
(define-syntax listing
|
||||
(syntax-rules (:acc)
|
||||
((listing :acc args next . rest)
|
||||
(accumulating :acc (cons reverse '()) args next . rest))))
|
||||
|
||||
;;> \macro{(for x [pair] (listing-reverse expr))}
|
||||
|
||||
(define-syntax listing-reverse
|
||||
(syntax-rules (:acc)
|
||||
((listing-reverse :acc args next . rest)
|
||||
|
@ -312,33 +297,25 @@
|
|||
(define (append-reverse rev tail)
|
||||
(if (null? rev) tail (append-reverse (cdr rev) (cons (car rev) tail))))
|
||||
|
||||
;;> \macro{(for x [pair] (appending expr))}
|
||||
|
||||
(define-syntax appending
|
||||
(syntax-rules (:acc)
|
||||
((appending :acc args next . rest)
|
||||
(accumulating :acc (append-reverse reverse '()) args next . rest))))
|
||||
|
||||
;;> \macro{(for x [pair] (appending-reverse expr))}
|
||||
|
||||
(define-syntax appending-reverse
|
||||
(syntax-rules (:acc)
|
||||
((appending-reverse :acc args next . rest)
|
||||
(accumulating :acc (append-reverse (lambda (x) x) '()) args next . rest))))
|
||||
|
||||
;;> \macro{(for x (summing expr))}
|
||||
|
||||
(define-syntax summing
|
||||
(syntax-rules (:acc)
|
||||
((summing :acc args next . rest)
|
||||
(accumulating :acc (+ (lambda (x) x) 0) args next . rest))))
|
||||
|
||||
;;> \macro{(for x (multiplying expr))}
|
||||
|
||||
(define-syntax multiplying
|
||||
(syntax-rules (:acc)
|
||||
((multiplying :acc args next . rest)
|
||||
(accumulating (* (lambda (x) x) 1) args next . rest))))
|
||||
(accumulating :acc (* (lambda (x) x) 1) args next . rest))))
|
||||
|
||||
|
||||
;;; Here starts generator clauses.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue