[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