我有一个文件,其中包含一组200000多个字,我希望程序读取数据并将其存储在数组中,然后用所有200000多个词组成一个新数组。
我把代码写成
import System.IO
main = do
handle <- openFile "words.txt" ReadMode
contents <- hGetContents handle
con <- lines contents
putStrLn ( show con)
hClose handle
但它给出的错误是第5行的类型错误
文本文件是形式的
ABRIDGMENT
ABRIDGMENTS
ABRIM
ABRIN
ABRINS
ABRIS
等等
代码中有哪些修改,它可以形成一个单词数组
我在python(HTH)中解决了它
def readFile():
allWords = []
for word in open ("words.txt"):
allWords.append(word.strip())
return allWords
也许
readFile "words.txt" >>= return . words
型
:: IO [String]
或者你可以写
getWordsFromFile :: String -> IO [String]
getWordsFromFile file = readFile file >>= return . words
并用作
main = do
wordList <- getWordsFromFile "words.txt"
putStrLn $ "File contains " ++ show (length wordList) ++ " words."
@sanityinc和@Sarah非常有建设性的评论(谢谢!):
@santiyinc:"其他选项:如果已从Control.Applicative
导入<$>
,则为fmap words $ readFile file
或words <$> readFile file
"
@Sarah:"详细说明一下,每当你看到foo >>= return . bar
时,你都可以(也应该)用fmap bar foo
代替它,因为你实际上并没有使用Monad
带来的额外功能,而且在大多数情况下,将自己限制在一个不必要的复杂类型中是没有好处的。将来Applicative
是Monad
的一个超类时,情况会更糟。"