fun*_*ial 1 arrays io recursion haskell functional-programming
我在编写类型
Int -> IO [Int]或函数时遇到问题Int -> [IO Int]
我有以下代码不起作用:
createEIList :: Int -> IO [Int]
createEIList len = do
cur <- createEI
(return cur):(createEIList (len-1))
Run Code Online (Sandbox Code Playgroud)
createEI的位置 createEI :: IO Int
做这样的事情的最佳方法是什么?
使它接近你原来的
createEIList :: Int -> IO [Int]
createEIList len = do
cur <- createEI
rest <- createEIList (len-1)
return (cur:rest)
Run Code Online (Sandbox Code Playgroud)
这样,您不会尝试附加IO Int到列表中,而是返回整个列表,将您提升[Int]到IO [Int]
你也可能想要一个基础案例
createEIList 0 = return []
createEIList n = ...
Run Code Online (Sandbox Code Playgroud)
这样递归实际上终止了.
另外值得注意的是,您可以使用组合器删除显式递归
replicateM :: Int -> IO a -> IO [a] -- Restricted for clarity
Run Code Online (Sandbox Code Playgroud)
我会留给你弄清楚如何使用它.
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |