1

次のようなData.Map(freqMap)があります。

"SO" -> "10"
"OM" -> "20"
...

したがって、2文字ごとにいくつかの値をマップします。

そして、私は文字列のリストを持っています:

["SO", "OM", "ME", "ET" ...]

このリストを別のリストに変換する必要があります。

["10", 20", ...]

ここで、すべての要素は私のマップ(freqMap)からの値です。

再帰を使用してソリューションを作成しました。

score_ngram :: [String] -> Map.Map String String -> [Int] -> [Int]
score_ngram [] scores result = result
score_ngram ngrams scores result = score_ngram (tail ngrams) scores (result ++ [value])
    where value = case (Map.lookup (head ngrams) scores) of
        Just v -> read v :: Int
        Nothing -> 0

しかし、マップ関数を使用して取得できるかどうか疑問に思っていますか?

このようなもの:

map (Map.lookup element_of_list freqMap) ["SO", "OM", "ME", "ET" ...]
4

1 に答える 1

4

存在しないngramのスコアを0にする場合は、次を使用できます。

map (read . flip (Map.findWithDefault "0") freqMap) ["SO", "OM", "ME", "ET" ...]
于 2012-11-03T12:51:03.483 に答える