
* Haisheng Wu
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]
Do you have any cool solution in FP way?
You can use IntMap as a replacement for arrays: (I didn't understand your algorithm exactly, since you use 'c', which is not defined, but hopefully this is close enough) import Control.Monad import Data.List import Data.IntMap as IntMap a = [1,1,1,1] b = [0,1,2,3] c = IntMap.fromList $ zipWith (,) [0..] a d = foldl' f IntMap.empty $ liftM2 (,) a b where f m (i, j) = let s = i+j in if s < 3 then IntMap.insertWith (+) s (c ! i) m else m main = print d A single non-obvious thing here is "liftM2 (,) a b" -- it builds the cartesian product of lists a and b and is used here to replace your nested loops. -- Roman I. Cheplyaka :: http://ro-che.info/