List comprehensions
Graham Klyne
gk@ninebynine.org
Fri, 13 Jun 2003 19:03:07 +0100
In a response to me on the "powerset" thread, you wrote:
At 19:50 04/06/03 -0400, Derek Elkins wrote:
>In fact, you could rewrite the
>whole thing as concatMap (flip combinations as) [1..length as]. A list
>comprehension with only one source and no filters is the same as a map.
Is there any particular reason to avoid using a list comprehension, even if
a map would do? I ask because I seem not infrequently to find that a list
comprehension is more compact and easier to read, even though map could
suffice. This may be when the applied function is relatively complex, and
would otherwise require a sequence of 'where' definitions.
My current example is this:
[[
-- |Graph substitution function.
-- This function performs the substitutions in 'vars', and
-- replaces any nodes corresponding to unbound query variables
-- with new blank nodes.
rdfQuerySubsBlank :: RDFQueryBindings -> RDFGraph -> [RDFGraph]
rdfQuerySubsBlank vars gr =
[ remapLabels vs bs True g
| v <- vars
, let (g,vs) = rdfQuerySubs2 v gr
, let bs = allLabels isBlank g
]
]]
I could write it with map, but the ways I came up with all seemed
convoluted and difficult to follow.
#g
-------------------
Graham Klyne
<GK@NineByNine.org>
PGP: 0FAA 69FF C083 000B A2E9 A131 01B9 1C7A DBCA CB5E