Kel*_*reu -3 recursion haskell
所以我正在学习如何在Haskell中编程.
我希望看到的一件事是通过使用map并使用不使用列表推导而不使用map或任何其他高阶库函数的递归,为列表的每个元素添加1.
我认为看到两种实施方式都很酷.
如果您了解了什么map,那么我认为编写您打算做的事情并不困难.当你看到的类型map
*Main> :t map
map :: (a -> b) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)
因此它需要一个函数和一个列表,并在将该函数应用于列表的每个元素后返回另一个列表.因此,为了您的目的,为每个元素添加一个,您可以选择要执行的功能(+1).所以
*Main> map (+1) [3,4,5,1,2]
[4,5,6,2,3]
Run Code Online (Sandbox Code Playgroud)
如果您了解基本的haskell,现在定义自己的函数很容易.您可以查看map帮助来源.
map _ [] = []
map f (x:xs) = f x : map f xs
Run Code Online (Sandbox Code Playgroud)
它为您提供了实现递归递增函数所需的所有帮助
add' [] = []
add' (x:xs) = (x+1) : add' xs
Run Code Online (Sandbox Code Playgroud)
现在在ghci中尝试这个
*Main> add' [3,4,5,1,2]
[4,5,6,2,3]
Run Code Online (Sandbox Code Playgroud)