我想在尾递归函数中将以下函数转换为genEdges
函数。单递函数中的尾递归
genEdges :: Int -> Node -> IO [Edge]
genEdges n origin | n == 0 = return []
| otherwise = do
edge <- genRandEdge origin
edges <- genEdges (n-1) (snd edge)
return $ edge : edges
我的意思是,最后一行应该是这样的
return $ edge : genEdges (n-1) (snd edge)
虽然我知道类型的edge
和genEdges (n-1) (snd edge)
是不同的,因此这个例子行不正确。
这可能吗?如果是这样,功能应该如何?如果不是,为什么?
无论如何,尾递归是Haskell中的一个红鲱鱼,因为它的评估模型与传统语言差别很大。 –