我试图从文本文件中删除重复项,我尝试了如下代码;
import Data.List
main = do
let singlewords = []
handle <- readFile "/tmp/foo.txt"
singlewords = words handle
nub singlewords
Run Code Online (Sandbox Code Playgroud)
它当然给出了一个错误,因为我对haskell很新,而且我一直在做一些练习但是我觉得我还有更多的时间来适应它.我非常感谢您的帮助.
你的代码修好了:
import Data.List
main = do
-- let singlewords = [] -- this line removed
content <- readFile "/tmp/foo.txt"
let singlewords = words content -- added the let keyword
return (nub singlewords) -- added call to return
Run Code Online (Sandbox Code Playgroud)
在您编写的第一行let singlewords = [],然后尝试为其分配新值singlewords.这不是我们在Haskell中的做法,在使用它们之前不需要"声明"或"定义"名称.
在Haskell中,我们将有效计算(IO是一种有效计算)与纯计算分开.我们使用有效计算绑定结果
name <- computation
Run Code Online (Sandbox Code Playgroud)
我们使用的绑定纯计算的结果
let name = computation
Run Code Online (Sandbox Code Playgroud)
在a- doblock中.
do-block中的最后一行是整个块将计算的内容,因此必须是有效的计算.在您的示例中,您希望返回纯计算的结果,因此必须将结果提升为有效的结果,我们使用return.
要查看要将其输出到控制台的单个单词,可以执行以下几项功能:https://hackage.haskell.org/package/base-4.8.1.0/docs/Prelude.html#g: 27.
最简单的方法是singlewords使用print以下方法输出列表:
main = do
content <- readFile "/tmp/foo.txt"
let singlewords = nub (words content)
print singlewords
Run Code Online (Sandbox Code Playgroud)