Question

REBOL has no built-in way to perform list comprehensions. However, REBOL has a powerful facility (known as parse) that can be used to create domain-specific languages (DSLs). I've used parse to create such a mini-DSL for list comprehensions. In order to interpret the expression, the block containing the comprehension is passed to a function, which for lack of a better term I've called comprehend.

Example:

comprehend [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]

For some reason, comprehend doesn't sound right to me, but something like eval is too general.

I haven't found any other language that requires a keyword or function for list comprehensions. They are pure syntactic sugar wherever they exist. Unfortunately I don't have that option. So, seeing that I must have a function, what's a good, succinct, logical name for it?

Was it helpful?

Solution

How about select?

select [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]

OTHER TIPS

Because list comprehensions can be thought of as analogous to map, you might think about calling it something like "listmap". Alternately, because list comprehensions are based on set-builder notation, you could call it something along the lines of "build" or "buildlist".

(Disclaimer: I know very little about REBOL, so forgive me if these names are already taken)

transmogrify

do could be appropriate, as list comprehensions are just one instance of Monad comprehensions, and do is the keyword used in Haskell for sugared Monadic computations but I suspect it's too vague for a user library. I called my list comprehension function comp, but that's just an abbreviation of what you already have. Perhaps yielding? E.g. yielding [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]. Just sort of squint and pretend the [ ] aren't there.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top