Previous: , Up: iteration thunks   [Index]


22.5 Filtering with iterators

The following syntactic bindings are exported by the library (vicare containers iteration-thunks). The syntactic bindings whose name is prefixed with ‘$’ are unsafe: they do not validate their arguments.

Function: iteration-thunk-filter acceptor pred iter
Function: $iteration-thunk-filter acceptor pred iter

Iterate over the items from iter, apply pred to them, apply acceptor to the items for which pred returns true. Return unspecified values.

(receive-and-return (ell)
    '()
  (iteration-thunk-filter
      (lambda (rv)
        (set-cons! ell rv))
      even?
    (make-list-iteration-thunk '(1 3 5 7))))
⇒ ()

(receive-and-return (ell)
    '()
  (iteration-thunk-filter
      (lambda (rv)
        (set-cons! ell rv))
      even?
    (make-list-iteration-thunk '(1 3 4 5 7 8))))
⇒ (8 4)
Function: iteration-thunk-partition match-acceptor no-match-acceptor pred iter
Function: $iteration-thunk-partition match-acceptor no-match-acceptor pred iter

Iterate over the items from iter and apply pred to them: if the return value is true, apply match-acceptor to the item; if the return value is #f, apply no-match-acceptor to the item. Return unspecified values.

(receive-and-return (match-ell no-match-ell)
    (values '() '())
  (iteration-thunk-partition
      (lambda (match-rv)
        (set-cons! match-ell match-rv))
      (lambda (no-match-rv)
        (set-cons! no-match-ell no-match-rv))
      even?
    (make-list-iteration-thunk '(1 3 5 7))))
⇒ () (7 5 3 1)

(receive-and-return (match-ell no-match-ell)
    (values '() '())
  (iteration-thunk-partition
      (lambda (match-rv)
        (set-cons! match-ell match-rv))
      (lambda (no-match-rv)
        (set-cons! no-match-ell no-match-rv))
      even?
    (make-list-iteration-thunk '(1 3 4 5 7 8))))
⇒ (8 4) (7 5 3 1)