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)) ((elts (map car pairs))
(succ (map step pairs))) (succ (map step pairs)))
() ()
. rest)) . rest))))
))
(define-syntax define-in-indexed (define-syntax define-in-indexed
(syntax-rules () (syntax-rules ()
@ -154,8 +153,6 @@
. rest)) . rest))
)) ))
;;> \macro{(for ch (in-port [input-port [reader [eof?]]]))}
(define-syntax in-port (define-syntax in-port
(syntax-rules () (syntax-rules ()
((in-port ((var) source) next . rest) ((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)) next . rest)
(in-port ((var p) (port read-char eof-object?)) next . rest)) (in-port ((var p) (port read-char eof-object?)) next . rest))
((in-port ((var p) (port reader eof?)) 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))) ((var (reader p) (reader p)))
((e? var)) ((eof? var))
() ()
() ()
. rest)))) . rest))))
;; ;;> \macro{(for ch (in-file [input-port [reader [eof?]]]))}
(define-syntax in-file (define-syntax in-file
(syntax-rules () (syntax-rules ()
((in-file ((var) source) next . rest) ((in-file ((var) source) next . rest)
@ -193,7 +188,6 @@
() ()
((close-input-port p)) . rest)))) ((close-input-port p)) . rest))))
(define-syntax in-generator (define-syntax in-generator
(syntax-rules () (syntax-rules ()
((_ ((var) (source)) next . rest) ((_ ((var) (source)) next . rest)
@ -205,8 +199,6 @@
() ()
. rest)))) . rest))))
;;> \macro{(for x (up-from [start] [(to limit)] [(by step)]))}
(define-syntax up-from (define-syntax up-from
(syntax-rules (to by) (syntax-rules (to by)
((up-from (() . args) next . rest) ((up-from (() . args) next . rest)
@ -232,8 +224,6 @@
((up-from ((var) (start limit)) next . rest) ((up-from ((var) (start limit)) next . rest)
(up-from ((var) (start limit 1)) next . rest)))) (up-from ((var) (start limit 1)) next . rest))))
;;> \macro{(for x (down-from [start] [(to limit)] [(by step)]))}
(define-syntax down-from (define-syntax down-from
(syntax-rules (to by) (syntax-rules (to by)
((down-from (() . args) next . rest) ((down-from (() . args) next . rest)
@ -293,17 +283,12 @@
(folding ((var) (init update (if #t))) n . rest)) (folding ((var) (init update (if #t))) n . rest))
((_ :acc ((var) (init)) n . rest) ((_ :acc ((var) (init)) n . rest)
(folding ((var) (init var (if #t))) n . rest)))) (folding ((var) (init var (if #t))) n . rest))))
;;> \macro{(for x [pair] (listing expr))}
(define-syntax listing (define-syntax listing
(syntax-rules (:acc) (syntax-rules (:acc)
((listing :acc args next . rest) ((listing :acc args next . rest)
(accumulating :acc (cons reverse '()) args next . rest)))) (accumulating :acc (cons reverse '()) args next . rest))))
;;> \macro{(for x [pair] (listing-reverse expr))}
(define-syntax listing-reverse (define-syntax listing-reverse
(syntax-rules (:acc) (syntax-rules (:acc)
((listing-reverse :acc args next . rest) ((listing-reverse :acc args next . rest)
@ -312,33 +297,25 @@
(define (append-reverse rev tail) (define (append-reverse rev tail)
(if (null? rev) tail (append-reverse (cdr rev) (cons (car rev) tail)))) (if (null? rev) tail (append-reverse (cdr rev) (cons (car rev) tail))))
;;> \macro{(for x [pair] (appending expr))}
(define-syntax appending (define-syntax appending
(syntax-rules (:acc) (syntax-rules (:acc)
((appending :acc args next . rest) ((appending :acc args next . rest)
(accumulating :acc (append-reverse reverse '()) args next . rest)))) (accumulating :acc (append-reverse reverse '()) args next . rest))))
;;> \macro{(for x [pair] (appending-reverse expr))}
(define-syntax appending-reverse (define-syntax appending-reverse
(syntax-rules (:acc) (syntax-rules (:acc)
((appending-reverse :acc args next . rest) ((appending-reverse :acc args next . rest)
(accumulating :acc (append-reverse (lambda (x) x) '()) args next . rest)))) (accumulating :acc (append-reverse (lambda (x) x) '()) args next . rest))))
;;> \macro{(for x (summing expr))}
(define-syntax summing (define-syntax summing
(syntax-rules (:acc) (syntax-rules (:acc)
((summing :acc args next . rest) ((summing :acc args next . rest)
(accumulating :acc (+ (lambda (x) x) 0) args next . rest)))) (accumulating :acc (+ (lambda (x) x) 0) args next . rest))))
;;> \macro{(for x (multiplying expr))}
(define-syntax multiplying (define-syntax multiplying
(syntax-rules (:acc) (syntax-rules (:acc)
((multiplying :acc args next . rest) ((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. ;;; Here starts generator clauses.