这是我的take版本使用foldr:
myTake n list = foldr step [] list
where step x y | (length y) < n = x : y
| otherwise = y
main = do print $ myTake 2 [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
输出不是我所期望的:
[3,4]
Run Code Online (Sandbox Code Playgroud)
然后我尝试通过插入y自身的长度进行调试,结果是:
[3,2,1,0]
Run Code Online (Sandbox Code Playgroud)
我不明白为什么长度按降序插入.也许我错过了一些明显的事
我有这个简单的函数,它返回列表的邻接元素的对列表.
adjacents :: [a] -> [(a,a)]
adjacents (x:y:xs) = [(x,y)] ++ adjacents (y:xs)
adjacents (x:xs) = []
Run Code Online (Sandbox Code Playgroud)
我在尝试编写邻接时遇到问题foldr.我做了一些研究,但似乎没有什么能给我一个暗示.怎么做到呢?
recursion haskell functional-programming fold higher-order-functions