【发布时间】:2013-10-16 00:03:45
【问题描述】:
我已经在haskell 中编写了2 个函数,现在我必须编写第三个函数,用于计算haskell 中的前缀数量。这是一个例子:
我必须列出。第一个是前缀列表,另一个是文本列表。这个函数的作用是计算前缀列表中每个单词作为文本列表中所有单词的前缀的次数,并将其呈现在一个元组中(单词,作为前缀出现的次数在正文中:
前缀列表 ["go", "co"]
文本列表["golf", "company", "count"]
这应该返回 [("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 _ [] = 0
howManyPrefixes [] _ = 0
howManyPrefixes (x:xs) (y:ys) = (x, prefixCount x (y:ys))
有什么帮助吗?
【问题讨论】:
-
如果您使用
Ord而不仅仅是Eq,您将可以从Data.List访问sort、sortBy、group和groupBy。我会先玩那些。 -
@bheklilr 你不需要这些,
Ord约束在你只检查前缀时是不必要的。 -
@jozefg 你确实需要
Ord来代替sort(我错误地认为group也需要它),虽然这可以在没有Ord的情况下解决(作为你的答案点out),但我试图引导 dcarou 找到我看到的使用其中一个或多个函数的潜在解决方案。 -
我必须使用递归解决方案
标签: haskell