折叠功能保持切换变量位置

时间:2019-05-06 15:41:39

标签: haskell recursion fold

我想编写一个函数,该函数接受一个整数列表并返回一个列表,其中每个元素都是负数。

negate :: [Int] -> [Int]
negate xs = foldl (\x xs -> (abs x * (-1)) : xs) [] xs

此函数取反所有数组对象,但也取反数组中所有变量的位置。是什么让此功能反转了位置?

1 个答案:

答案 0 :(得分:5)

ERROR: Could not get unknown property 'applicationVariants' for object of type com.android.build.gradle.LibraryExtension. 可以! foldl是向左折叠的,因此它从列表的初始状态(您以foldl提供)和列表的最左边元素开始,在列表上起作用,并调用您的函数来否定该元素的状态。然后,它接受下一个最左边的元素并执行相同的操作。但是您每次都在前面添加前缀,这意味着输入的第一个元素最终对应于输出的最后一个元素,因为它是第一个被添加前缀的。

您可能想要[],这是从最右边的元素开始的折叠。另外,对于这个特定问题,使用foldr是更简单的方法。

示例代码:

map