MapReduce in Haskell



我正在尝试实现MapReduce函数。我必须在没有任何并行性的情况下做到这一点,到目前为止我有这个:

import Data.Map
import Data.Char
map_ list = toList $ fromListWith (+) [(x, 1) | x <- list]
main_ = map_ $ getWords "test.txt" --getting error here
prettyprint [(x, y):xs] =  x ++ " : " ++ y -- trying to print out list
-- Loads words from a text file into a list.
getWords :: FilePath -> IO [String]
getWords path = do contents <- readFile path
               return ([map toLower x | x <- words contents]) --- Ambiguous occurrence `map'

主要任务是使用MapReduce从文件中获取单词列表以及每个新单词的频率。

我不明白在这种情况下减少是如何工作的。我只知道我正在将列表映射到计算单词频率的函数。如何减少?

只是解决你的编译问题...

PreludeData.Map都定义了函数map

解决歧义的一个好方法是像这样限定Data.Map的导入:

import qualified Data.Map as M

然后用M.map来指代Data.Map中的函数,用普通map来指代前奏版本。

main_的问题是getWords是一个IO [String],所以你需要用<-运算符提取列表,然后才能使用它:

main_ = do ws <- getWords
           -- do something with ws
           print $ map_ ws

相关内容

  • 没有找到相关文章