在不改变列表的情况下,对列表中的所有元素进行排名

时间:2018-05-24 11:25:32

标签: list haskell fold

列表是

[2, 3, 4]

我希望取得每个结果的取幂。所以,它将是:

  

(2 ^ 3)^ 4 = 4096

我的解决方案是

  • 使用foldl
  • 手动设置列表的第一个元素作为基本情况
  • 手动设置基本案例作为列表的第一个元素

代码是

foldl (^) 2 [1, 3, 4]

跟踪

  

((2 ^ 1)^ 3)^ 4 = 4096

有没有改变清单的解决方案?

1 个答案:

答案 0 :(得分:6)

是的,如果保证列表中有第一个元素,我们可以使用foldl1 :: (a -> a -> a) -> [a] -> a使用列表的 first 元素作为初始累加器。所以我们可以使用:

foldl1 (^) [2, 3, 4]

这当然会产生相同的结果:

Prelude> foldl1 (^) [2,3,4]
4096

请注意,如果您使用 empty 列表,则上述函数将出错。所以你需要处理这种情况 - 如果可能的话 - 通过一些额外的逻辑。