gpt4 book ai didi

haskell - 带IO的递归函数

转载 作者:行者123 更新时间:2023-12-02 10:42:01 25 4
gpt4 key购买 nike

我在执行下一个代码时遇到问题,其想法是创建一个函数,该函数从文件中返回单词列表,目录位于元组中。

gainData:: [FilePath] -> IO [([String],String)]
gainData[] = []
gainData(xz:xc) = do
temp <- readFileP xz
return ((temp,xz) : gainData xc)

函数 readFileP 获取包含文件所有单词的列表。

readFileP:: FilePath -> IO [String]

例如我想要得到

[(["word","word1"],"fileAddress"),(["word","word1"],"fileAddress2")]

我不知道出了什么问题,有人可以告诉我吗?谢谢。

最佳答案

你不能这样做:

return ((temp,xz) : gainData xc)

gainData函数返回 IO [something]不仅仅是[something] 。您必须首先提取返回的值:

res <- gainData xc
return $ (temp,xz) : res

varname <- action执行以下操作:

  • 它调用 action ,在本例中为 gainData xc 。此操作返回 IO something
  • 它“提取”something来自IO并将其分配给varname

事实上,它适用于任何 Monad ,不仅仅是 IO .

此外,在第一个定义中,您将返回 [] ,但这属于 [something] 类型而gainData类型应为 IO [something]所以你必须添加 IO图层:

gainData [] = return []

return<- 的“相反” 。需要 something并将其变成 IO something ,可以使用 <- 提取.

关于haskell - 带IO的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30457304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com