我想在尾遞歸函數中將以下函數轉換爲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中的一個紅鯡魚,因爲它的評估模型與傳統語言差別很大。 –