haskell - Haskell 中的前缀

标签 haskell

我已经在 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/

相关文章:

haskell - 重复 fmap 的乐趣

haskell - 如何在独立的Getter中使用(^?ix 0)?

haskell - 管道中的 IO 操作?

haskell - 使用量化约束导出 Ord (forall a. Ord a => Ord (f a))

haskell - 在 Haskell 中表达一系列脚本化的 Python 字符串替换

haskell - 为什么在下面的示例中不应该使用缓冲?

haskell - 循环一元谓词

haskell - 枚举 Generic 实例的所有值时无限递归

haskell - 如何在 Leksah 中添加额外的开关?

haskell - 两个应用程序/单子(monad)保持单曲面结构但方式略有不同的实际意义是什么?