[Haskell-cafe] Rewrite this imperative in FP way

Haisheng Wu freizl at gmail.com
Mon Feb 6 11:56:18 CET 2012

```The reason I redefined Eq is:
When doing `union` over two list of MyTuple is just base on its first
element.
Basically it means: [(1,2), (2,2)] `union` [(1,0), (2,0), (0,0)]
produce [(1,2), (2,2), (0,0)]
rather than [(1,2),(2,2),(1,0),(2,0),(0,0)] by default.

-Haisheng

On Sun, Feb 5, 2012 at 11:37 PM, Yves Parès <yves.pares at gmail.com> wrote:

> Concerning your first solution, I don't understand why you redefine Eq but
> not Ord instance. Ord will still work by comparing the tuples and not the
> first elements of said tuples.
> Plus the good news is you don't have to do this: just use regular tuples
> and use sort*By *or group*By *functions from Data.List with the 'on'
> function from Data.Function.
> For instance your Eq instance could have been written
> x == y = (==) `on` (fst . getTuple)
>
> With regular tuples you can write "sortBy (compare `on` fst)".
>
>
> Plus can you rewrite your original imperative algorithm with the right
> variable names? You're using a 'd' array that's not been defined.
>
>
> 2012/2/5 Haisheng Wu <freizl at gmail.com>
>
>> a = [1,1,1,1]
>> b = [0,1,2,3]
>> d = [0,0,0,0]
>>
>> for i in b:
>>   for j in c:
>>     if (i+j)<3:
>>       d[i+j] += a[i]
>>
>> My just work implementation in Haskell
>> http://hpaste.org/57452
>>
>> Another people implementation in Haskell with Monad and it turns out
>> complex and very imperatively.
>> http://hpaste.org/57358
>>
>> Do you have any cool solution in FP way?
>>
>> Thanks.
>> -Simon
>>
>> _______________________________________________