Made all mutating accumulators visible in the body
Previously hashing and vectoring hid the resulting hash before the final-function. This is no longer the case. Also, now some of the tests work...
This commit is contained in:
		
							parent
							
								
									5d07594f53
								
							
						
					
					
						commit
						cccc324ecd
					
				
					 2 changed files with 65 additions and 88 deletions
				
			
		|  | @ -176,8 +176,8 @@ | |||
|            ((ge index end)) | ||||
|            ((var (r tmp index))) | ||||
|            () | ||||
|        . rest)) | ||||
|     )) | ||||
|        . rest)))) | ||||
| 
 | ||||
| 
 | ||||
| (define-syntax in-port | ||||
|   (syntax-rules () | ||||
|  | @ -257,6 +257,21 @@ | |||
|        (lambda () | ||||
|          (g)))))) | ||||
| 
 | ||||
| (define (make-up-from-generator/bounded start limit step) | ||||
|   (lambda () | ||||
|     (if (>= start limit) | ||||
|         (eof-object) | ||||
|         (let ((res start)) | ||||
|           (set! start (+ start step)) | ||||
|           res)))) | ||||
| 
 | ||||
| (define (make-up-from-generator/unbounded start step) | ||||
|   (lambda () | ||||
|     (let ((res start)) | ||||
|       (set! start (+ start step)) | ||||
|       res))) | ||||
| 
 | ||||
| 
 | ||||
| (define-syntax up-from | ||||
|   (syntax-rules (:to :by) | ||||
|     ((up-from :for (() . args) next . rest) | ||||
|  | @ -279,7 +294,34 @@ | |||
|     ((up-from :for ((var) (start limit step)) next . rest) | ||||
|      (next ((s start) (l limit) (e step)) ((var s (+ var e))) ((>= var l)) () () . rest)) | ||||
|     ((up-from :for ((var) (start limit)) next . rest) | ||||
|      (up-from :for ((var) (start limit 1)) next . rest)))) | ||||
|      (up-from :for ((var) (start limit 1)) next . rest)) | ||||
|     ;; Generator clauses | ||||
|     ((up-from start (:to limit) (:by step)) | ||||
|      (make-up-from-generator/bounded start limit step)) | ||||
|     ((up-from start (:to limit)) | ||||
|      (make-up-from-generator/bounded start limit 1)) | ||||
|     ((up-from start (:by step)) | ||||
|      (make-up-from-generator/unbounded start step)) | ||||
|     ((up-from start) | ||||
|      (make-up-from-generator/unbounded start 1)) | ||||
|     ((up-from start limit step) | ||||
|      (make-up-from-generator/bounded start limit step)) | ||||
|     ((up-from start limit) (make-up-from-generator/bounded start limit 1)))) | ||||
| 
 | ||||
| 
 | ||||
| (define (make-down-from-generator/bounded start end step) | ||||
|   (lambda () | ||||
|     (if (< start end) | ||||
|         (eof-object) | ||||
|         (let ((res start)) | ||||
|           (set! start (- start step)) | ||||
|           res)))) | ||||
| 
 | ||||
| (define (make-down-from-generator/unbounded start step) | ||||
|   (lambda () | ||||
|     (let ((res start)) | ||||
|       (set! start (- start step)) | ||||
|       res))) | ||||
| 
 | ||||
| (define-syntax down-from | ||||
|   (syntax-rules (:to :by) | ||||
|  | @ -302,7 +344,18 @@ | |||
|     ((down-from :for ((var) (start limit step)) next . rest) | ||||
|      (next ((s start) (l limit) (e step)) ((var (- s e) (- var e))) ((< var l)) () () . rest)) | ||||
|     ((down-from :for ((var) (start limit)) next . rest) | ||||
|      (down-from :for ((var) (start limit 1)) next . rest)))) | ||||
|      (down-from :for ((var) (start limit 1)) next . rest)) | ||||
|     ;;generator clauses | ||||
|     ((down-from start (:to limit) (:by step)) | ||||
|      (make-down-from-generator/bounded start limit step)) | ||||
|     ((down-from start (:to limit)) | ||||
|      (make-down-from-generator/bounded start limit 1)) | ||||
|     ((down-from start (:by step)) | ||||
|      (make-down-from-generator/unbounded start step)) | ||||
|     ((down-from start limit step) | ||||
|      (make-down-from-generator/bounded start limit step)) | ||||
|     ((down-from start limit) (make-down-from-generator/bounded start limit 1)) | ||||
|     ((down-from start) (make-down-from-generator/unbounded start 1)))) | ||||
| 
 | ||||
| 
 | ||||
| (define-syntax in-hash | ||||
|  | @ -316,7 +369,7 @@ | |||
|       () | ||||
|       . rest)) | ||||
|     ((in-hash hash-expr) | ||||
|      (in-list :for (hash-map->list cons hash-expr))))) | ||||
|      (in-list (hash-map->list cons hash-expr))))) | ||||
| 
 | ||||
| 
 | ||||
| (define-syntax accumulating | ||||
|  | @ -392,7 +445,7 @@ | |||
|      (define-syntax name | ||||
|        (syntax-rules (:acc if initial) | ||||
|          ((_ :acc ((var) (key value)) n . rest) | ||||
|           (name :acc ((var) (key value (if #t) (initial defualt-make))) n . rest)) | ||||
|           (name :acc ((var) (key value (if #t) (initial default-make))) n . rest)) | ||||
|          ;; either init or if | ||||
|          ((_ :acc ((var) (key value (if guard))) n . rest) | ||||
|           (name :acc ((var) (key value (if guard) (initial default-make))) n . rest)) | ||||
|  | @ -403,11 +456,11 @@ | |||
|           (name ((var) (key value (if guard) (initial init))) n . rest)) | ||||
|          ((_ :acc ((var) (key value (if guard) (initial init))) n . rest) | ||||
|           (n | ||||
|            ((hash init)) | ||||
|            ((dummy (if #f #f) (if guard (setter hash key value) (if #f #f)))) | ||||
|            ((var init)) | ||||
|            ((dummy (if #f #f) (if guard (setter var key value) (if #f #f)))) | ||||
|            () | ||||
|            () | ||||
|            ((var hash)) | ||||
|            ((var var)) | ||||
|            . rest))))))) | ||||
| 
 | ||||
| (define-hashing hashing (make-hash-table) hash-set!) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Linus
						Linus