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)) |            ((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. | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Linus
						Linus