如何在Haskell中切换列表中的2个元素

时间:2015-05-20 07:12:51

标签: list haskell

我将从一个例子开始(我认为它将显示我的问题)

switch 1 2 [[1,2,3,4],[5,6,0,7]] -> [[1,2,0,4],[5,6,3,7]]

[[1,2,3,4],[5,6,0,7]] !! 1 !! 2是零元素。第一个整数始终为1,第二个整数介于0和3之间,我想通过索引(来自第二个组件列表)将第一个组件列表中相同位置的元素作为参数更改。 / p>

我知道列表在Haskell中是不可变的,但是我仍然无法弄明白。

我该怎么做?

2 个答案:

答案 0 :(得分:4)

switch _ n [xs,ys] = [xs',ys']
   where (xs',ys',_) = unzip3 $ 
                       map (\t@(x,y,m) -> if m==n then (y,x,m) else t) $
                       zip3 xs ys [0..]

答案 1 :(得分:2)

switch i j l = [a,b]
    where (a,b) = unzip [if j==n then (l!!1!!n, l!!0!!n) else (l!!0!!n,l!!1!!n) | n<-[0..3]] 

第一个整数是无用的