在不改变列表的情况下对列表的所有元素取幂

Exponentiate all elements of a list without alter the list

名单是

[2, 3, 4]

我想对每个结果取幂。所以,它将是:

(2 ^ 3) ^ 4 = 4096

我的解决方案是

密码是

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

痕迹是

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

有没有不修改列表的解决方案?

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

<b>foldl1</b> (^) [2, 3, 4]

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

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

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