From 093d1319d9028b5ca16eaf901a31aee105aa1b70 Mon Sep 17 00:00:00 2001 From: Linus Date: Tue, 1 Dec 2020 20:54:42 +0100 Subject: [PATCH] Fixed a bug with a forgotten :acc. Inlined the in-file bindings, with the risk of exposing it to a misguided set!. --- iterators.scm | 33 +++++---------------------------- 1 file changed, 5 insertions(+), 28 deletions(-) diff --git a/iterators.scm b/iterators.scm index c1b3ce5..f2e6e4f 100644 --- a/iterators.scm +++ b/iterators.scm @@ -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.