# [Haskell-cafe] I need a hint in list processing

Tony Morris tonymorris at gmail.com
Sun Jun 14 23:55:12 EDT 2009

```nub . concat ?

Richard O'Keefe wrote:
>
> On 14 Jun 2009, at 8:06 pm, Fernan Bolando wrote:
>
>> Hi all
>>
>> If I have a number of list
>> example
>> list1 = [2,3]
>> list2 = [1,2]
>> list3 = [2,3,4]
>> list4 = [1,2,3]
>>
>> I want to create a list from the list above with n elements,
>> non-repeating and each elements index represents 1 of the elements
>> from the corresponding list so for the above input I would get.
>>
>> a = [3,2,4,1]
>
> I have been staring at this off and on all day,
> and I haven't the faintest idea what you want.
>
> What is "n".  What is it that doesn't repeat?
> How does the index of an element represent 1 element?
> Which list corresponds to what?
>
> I'm beginning to suspect that what you want is a "choice"
> function:
>     f [s1,...,sn] = [x1,...,xn]
> when each xi is an element of the corresponding si
> and no two xs are the same.
>
>
> all_choices :: Eq a => [[a]] -> [[a]]
> all_choices [] = [[]]
> all_choices (set:sets) =
>   [x:xs | xs <- all_choices sets, x  <- set, not(x `elem` xs)]
>
> The test case
>
>     all_choices [[2,3], [1,2], [2,3,4], [1,2,3]]
>
>
>     [[3,2,4,1], [3,1,4,2], [2,1,4,3]]
>
> and you probably want to use it something like
>
>     case all_choices sets of
>       [] -> there are no such choices
>       (first_choice:_) -> first_choice is one such choice
>
> For inputs like [[1,2],[2,1],[1]] there is of course no such
> choice function.
>
>
> _______________________________________________