删除haskell中文本文件中的重复项

时间:2015-12-23 20:23:19

标签: string haskell io

我正在尝试从文本文件中删除重复文件,我尝试了类似以下的代码;

import Data.List
main = do  
    let singlewords = []
    handle <- readFile "/tmp/foo.txt" 
    singlewords = words handle
    nub singlewords

它当然给出了一个错误,因为我对haskell很新,而且我一直在做一些练习但是我觉得我还有更多的时间来适应它。我非常感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

您的代码已修复:

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

do - 阻止。

do - 块中的最后一行是整个块将计算的内容,因此必须是有效的计算。在您的示例中,您希望返回纯计算的结果,因此必须将结果提升为有效的结果,我们使用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