Added some generator clauses to the iterators
in-vector, in-string and all other indexed for clauses now have generator clauses. in-hash now has a generator clause.
This commit is contained in:
parent
79b7c4eedd
commit
f0900a0497
1 changed files with 29 additions and 4 deletions
|
@ -126,12 +126,35 @@
|
||||||
(define-syntax in-type
|
(define-syntax in-type
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
((in-type seq next . rest)
|
((in-type seq next . rest)
|
||||||
(%in-idx >= (lambda (x i) (+ i 1)) (lambda (x) 0) length ref tmp seq next . rest))))
|
(%in-idx >= (lambda (x i) (+ i 1)) (lambda (x) 0) length ref tmp seq next . rest))
|
||||||
|
((_ coll)
|
||||||
|
(in-indexed-generator coll length ref))))
|
||||||
(define-syntax in-type-reverse
|
(define-syntax in-type-reverse
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
((in-type-reverse seq next . rest)
|
((in-type-reverse seq next . rest)
|
||||||
(%in-idx < (lambda (x i) (- i 1)) (lambda (x) (- (length x) 1)) (lambda (x) 0) ref tmp seq next . rest))))
|
(%in-idx <
|
||||||
))))
|
(lambda (x i) (- i 1))
|
||||||
|
(lambda (x) (- (length x) 1))
|
||||||
|
(lambda (x) 0) ref tmp seq next . rest))
|
||||||
|
((_ coll)
|
||||||
|
(in-indexed-generator-reverse coll length ref))))))))
|
||||||
|
|
||||||
|
(define (in-indexed-generator coll len ref)
|
||||||
|
(let ((index -1)
|
||||||
|
(length (len coll)))
|
||||||
|
(lambda ()
|
||||||
|
(set! index (+ index 1))
|
||||||
|
(if (>= index length)
|
||||||
|
(eof-object)
|
||||||
|
(ref coll index)))))
|
||||||
|
|
||||||
|
(define (in-indexed-generator-reverse coll len ref)
|
||||||
|
(let ((index (len coll)))
|
||||||
|
(lambda ()
|
||||||
|
(set! index (- index 1))
|
||||||
|
(if (< index 0)
|
||||||
|
(eof-object)
|
||||||
|
(ref coll index)))))
|
||||||
|
|
||||||
(define-in-indexed in-vector in-vector-reverse vector-length vector-ref)
|
(define-in-indexed in-vector in-vector-reverse vector-length vector-ref)
|
||||||
|
|
||||||
|
@ -291,7 +314,9 @@
|
||||||
((not (pair? cursor)))
|
((not (pair? cursor)))
|
||||||
((bindings (car cursor)))
|
((bindings (car cursor)))
|
||||||
()
|
()
|
||||||
. rest))))
|
. rest))
|
||||||
|
((_ hash-expr)
|
||||||
|
(in-list (hash-map->list cons hash-expr)))))
|
||||||
|
|
||||||
|
|
||||||
(define-syntax accumulating
|
(define-syntax accumulating
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue