I like the proposal. My earlier suggestion for supporting #:when and
#:unless in the body is the same as what you are asking for, I
believe.
On Wed, Sep 11, 2013 at 12:41 AM, Roman Klochkov kalimeh...@mail.ru wrote:
I propose to add yet one keyword to for/foldX/derived/break (and so to all
for/... syntaxes).
Reason:
If one need to filter the results of body before collecting them in
list/vector/sum/..., there are two options:
1. (filter filter-func (for/list ...)) : doubles memory consumption and
slower
2. (for/list (exprs ...) body ...) = (for/list (exprs ... #:when #t (res
(in-value (begin body ...))) #:when (filter-func res)) res). Works, but very
clumsy.
I propose syntax
(for/list (exprs ...) body ...) = (for/list (exprs ... #:filter
filter-func) body ...) with the same behavior as in 2.
Syntax:
#:filter filter-func = (thunk* #t)
Expects function with the same number of arguments as the result of for/...
body should return values. Applied to results of body, and collected only
if filter-func returns #t.
Implementation:
Minor changes in for.rkt in (define-syntax (for/foldX/derived stx) ...)
and in documentation. If you busy, I may do it myself and make pull request.
To think about:
How many values should return filter-func in (for/lists ...). Only one or as
many as values of body. I don't know what is more natural.
--
Roman Klochkov
_
Racket Developers list:
http://lists.racket-lang.org/dev
_
Racket Developers list:
http://lists.racket-lang.org/dev