我已经在 haskell 中编写了 2 个函数,现在我必须编写第三个函数,用于计算 haskell 中的前缀数量。这是一个例子:
我必须列出。第一个是前缀列表,另一个是文本列表。这个函数的作用是计算前缀列表中每个单词作为文本列表中所有单词的前缀的次数,并将其呈现在一个元组中(单词,它作为前缀出现的次数文中的话:
前缀列表[“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
最佳答案
你可以只使用map,当然它仍然是递归的:
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
关于haskell - Haskell 中的前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19391632/