我试图从文本文件中删除重复项,我尝试了如下代码;
import Data.List main = do let singlewords = [] handle <- readFile "/tmp/foo.txt" singlewords = words handle nub singlewords
它当然给出了一个错误,因为我对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
在您编写的第一行let singlewords = []
,然后尝试为其分配新值singlewords
.这不是我们在Haskell中的做法,在使用它们之前不需要"声明"或"定义"名称.
在Haskell中,我们将有效计算(IO
是一种有效计算)与纯计算分开.我们使用有效计算绑定结果
name <- computation
我们使用的绑定纯计算的结果
let name = computation
在a- do
block中.
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