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:
Linus 2020-12-01 20:54:42 +01:00
parent c53a08c769
commit 093d1319d9

View file

@ -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.