我在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))
任何帮助?
答案 0 :(得分:1)
使用zip
这很容易
howManyPrefixes ps ws = zip ps $ map (`prefixCount` ws) ps
现在,因为这看起来像家庭作业,我会让你自己编写递归解决方案,一些有用的提示。
howManyPrefixes xs (y:ys)
y:ys
。如果它是空的并不重要。