2

haskell で 2 つの関数を作成しましたが、haskell でプレフィックスの数を計算するために、3 つ目の関数を作成する必要があります。例を次に示します。

私はリストしなければなりません。1 つはプレフィックス リストで、もう 1 つはテキスト リストです。この関数が想定しているのは、プレフィックス リストの各単語がテキスト リストのすべての単語のプレフィックスである回数を計算し、それをタプル (単語、プレフィックスとして表示される回数) で提示することです。テキストの言葉で:

プレフィックスリスト ["go", "co"]

テキストリスト [「ゴルフ」、「会社」、「カウント」]

これは [("go", 1) , ("co", 2)] を返すはずです

私はこれを持っています:

isPrefixOf :: (Eq a) => [a] -> [a] -> Bool
isPrefixOf [] _ = True
isPrefixOf _ [] = False
isPrefixOf (x:xs) (y:ys) = x == y  && isPrefixOf xs ys


prefixCount :: (Eq a1, Num a) => [a1] -> [[a1]] -> a
prefixCount _ [] = 0
prefixCount x (y:ys) | isPrefixOf x y = 1 + prefixCount x ys
                 | otherwise = prefixCount x ys


howManyPrefixes [] _ = error("empty list!")
howManyPrefixes (x:xs) y  = map (\x -> (x,prefixCount x y)) xs
4

2 に答える 2

3

もちろん再帰的なマップを使用することもできます:

howManyPrefixes prefixList wordList = 
    map (\prefix -> (prefix, prefixCount prefix wordList)) prefixList

本当に使用せずに実行したい場合は、他のものと同じようにmap再実装できmapます。mapただ:

map :: (a -> b) -> [a] -> [b]
map f []     = []
map f (x:xs) = f x : map f xs

したがって、上記を次のように変換できます。

howManyPrefixes [] _ = []
howManyPrefixes (prefix:prefixList) wordList = 
 -- f x                                   : map f xs
    (prefix, prefixCount prefix wordList) : howManyPrefixes prefixList wordList
于 2013-10-15T22:03:23.620 に答える