[Haskell-cafe] (possibly) a list comprehensions question
Ozgur Akgun
ozgurakgun at gmail.com
Thu Nov 19 08:58:29 EST 2009
Thanks for the both quick answers.
This is what happens all the time, the thing I am trying to implement is
already in the library!
Neil,
I clearly understood the way you implemented. Actually I had a similar
implementation with some problems, one of which is the base-case you
mentioned.
Eugene,
I'll definitely have a look at the implementation of sequence.
Cheers!
2009/11/19 Neil Brown <nccb2 at kent.ac.uk>
> Ozgur Akgun wrote:
>
>> Anyway, just forget the fact that these funstions do not do a check on the
>> length of the input list for a moment. My question is, how can I generalize
>> this function to accept a list of lists of arbitrary length, and produce the
>> required result.
>>
>
> Hi,
>
> The concise solution is the list monad, as already posted. If that
> confuses you, here is a version using list comprehensions (well, mostly):
>
> allPossibilities :: [[a]] -> [[a]]
> allPossibilities [] = [[]]
> allPossibilities (l:ls) = [ x : xs | x <- l, xs <- allPossibilities ls]
>
> The second line prefixes all possibilities from the later lists with every
> element from the the first list. Note that the base-case is crucial; if it
> is the empty list [], that "xs <- allPossibilities ls" will not find any
> elements, and thus the list comprehension becomes the empty list, and the
> whole thing falls apart. Thus the base case must be the list containing the
> empty list, so that you have one possibility arising at the end upon which
> to prefix the items. Hope that makes sense...
>
> Thanks,
>
> Neil.
>
--
Ozgur Akgun
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20091119/4a9617f3/attachment.html
More information about the Haskell-Cafe
mailing list