试图通过整数列表来理解递归
Trying to understand recursion through a list of integers
我目前正在学习如何在 Haskell 中使用递归,我正在尝试了解如何遍历整数列表中的每个元素并对它们取反。到目前为止,我可以这样做,但只能在列表的最后一个元素上执行,所以我知道错误出在最后一行。遍历列表中的每个元素而不仅仅是最后一个元素的最佳方法是什么?
negation :: [Int] -> [Int]
negation [] = []
negation [n] = [-n]
negation(x:xs) = negation xs
尝试使用 cons
运算符 :
将取反的数字放在列表的前面。
negation (x:xs) = -x : negation xs
如果你这样做,你可以去掉第三行。
嗯,编写函数的最佳方式是这样的:
negation :: [Int] -> [Int]
negation xs = map negate xs
{- Example:
>>> map negate [1..5]
[-1,-2,-3,-4,-5]
-}
练习: 编写你自己的 map
版本:
myMap :: (a -> b) -> [a] -> [b]
myMap _ [] = _fillMeIn
myMap f (x:xs) = _fillMeIn
地图简单:
Prelude> let negatList= map (*(-1))
示例:
Prelude> negatList []
[]
Prelude> negatList [1]
[-1]
递归:
negation :: [Int] -> [Int]
negation [] = []
negation(x:xs) = -x:negation xs
之前的回答中提到,最好的方法是使用高阶函数如下
negation xs = map negate xs
尽可能使用高阶函数。它是 wiki.haskell.org 上的通用 Haskell 编程指南之一,它可以简化您的代码。
我目前正在学习如何在 Haskell 中使用递归,我正在尝试了解如何遍历整数列表中的每个元素并对它们取反。到目前为止,我可以这样做,但只能在列表的最后一个元素上执行,所以我知道错误出在最后一行。遍历列表中的每个元素而不仅仅是最后一个元素的最佳方法是什么?
negation :: [Int] -> [Int]
negation [] = []
negation [n] = [-n]
negation(x:xs) = negation xs
尝试使用 cons
运算符 :
将取反的数字放在列表的前面。
negation (x:xs) = -x : negation xs
如果你这样做,你可以去掉第三行。
嗯,编写函数的最佳方式是这样的:
negation :: [Int] -> [Int]
negation xs = map negate xs
{- Example:
>>> map negate [1..5]
[-1,-2,-3,-4,-5]
-}
练习: 编写你自己的 map
版本:
myMap :: (a -> b) -> [a] -> [b]
myMap _ [] = _fillMeIn
myMap f (x:xs) = _fillMeIn
地图简单:
Prelude> let negatList= map (*(-1))
示例:
Prelude> negatList []
[]
Prelude> negatList [1]
[-1]
递归:
negation :: [Int] -> [Int]
negation [] = []
negation(x:xs) = -x:negation xs
之前的回答中提到,最好的方法是使用高阶函数如下
negation xs = map negate xs
尽可能使用高阶函数。它是 wiki.haskell.org 上的通用 Haskell 编程指南之一,它可以简化您的代码。