在不改变列表的情况下对列表的所有元素取幂
Exponentiate all elements of a list without alter the list
名单是
[2, 3, 4]
我想对每个结果取幂。所以,它将是:
(2 ^ 3) ^ 4 = 4096
我的解决方案是
- 使用 foldl
- 手动将列表的第一个元素设置为基本情况
- 手动将基本情况设置为列表的第一个元素
密码是
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
请注意,如果您使用 空 列表,上述函数将出错。所以你需要通过一些额外的逻辑来处理这种情况——如果可能的话。
名单是
[2, 3, 4]
我想对每个结果取幂。所以,它将是:
(2 ^ 3) ^ 4 = 4096
我的解决方案是
- 使用 foldl
- 手动将列表的第一个元素设置为基本情况
- 手动将基本情况设置为列表的第一个元素
密码是
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
请注意,如果您使用 空 列表,上述函数将出错。所以你需要通过一些额外的逻辑来处理这种情况——如果可能的话。