列表是
[2, 3, 4]
我希望取得每个结果的取幂。所以,它将是:
(2 ^ 3)^ 4 = 4096
我的解决方案是
代码是
foldl (^) 2 [1, 3, 4]
跟踪
((2 ^ 1)^ 3)^ 4 = 4096
有没有改变清单的解决方案?
答案 0 :(得分:6)
是的,如果保证列表中有第一个元素,我们可以使用foldl1 :: (a -> a -> a) -> [a] -> a
使用列表的 first 元素作为初始累加器。所以我们可以使用:
foldl1 (^) [2, 3, 4]
这当然会产生相同的结果:
Prelude> foldl1 (^) [2,3,4]
4096
请注意,如果您使用 empty 列表,则上述函数将出错。所以你需要处理这种情况 - 如果可能的话 - 通过一些额外的逻辑。