I.z*_*.zv 1 recursion haskell fold
I want to write a function which takes a list of integers and returns a list where every element is negative.
negate :: [Int] -> [Int]
negate xs = foldl (\x xs -> (abs x * (-1)) : xs) [] xs
Run Code Online (Sandbox Code Playgroud)
This function negate all the array objects but also reverse the locations of all variables in the array. What make this function reverse the locations?
foldl做!foldl是左折,因此它会从列表的初始状态(您提供为[])和列表的最左侧元素开始在列表上工作,并调用将该元素的否定添加到状态的函数。然后,它接受下一个最左边的元素并执行相同的操作。但是,您每次都要进行前置操作,这意味着输入的第一个元素最终对应于输出的最后一个元素,因为它是第一个被前置的元素。
您可能需要这样做foldr,这是从最右边的元素开始的折叠。替代地,map对于该特定问题,使用将是更简单的方法。
样例代码:
makeAllNegative = map (negate . abs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |