在Haskell中使用多个数字对数字进行计数的函数
我正在尝试编写一个函数,用于计算Haskell中超过1位的字符串中的所有数字 示例1:“Test1 Test12” 这应该返回1,因为只有“Test12”有超过1个数字 示例2:“Test1 Test12 Test123” 这应该返回2,因为只有“Test12”和“Test123”超过1位 这就是我的代码当前的样子:在Haskell中使用多个数字对数字进行计数的函数,haskell,Haskell,我正在尝试编写一个函数,用于计算Haskell中超过1位的字符串中的所有数字 示例1:“Test1 Test12” 这应该返回1,因为只有“Test12”有超过1个数字 示例2:“Test1 Test12 Test123” 这应该返回2,因为只有“Test12”和“Test123”超过1位 这就是我的代码当前的样子: import Data.Char import Data.List import Data.Function digits = any ((1<) . length) .
import Data.Char
import Data.List
import Data.Function
digits = any ((1<) . length) . groupBy ((&&) `on` isDigit)
count :: String -> Int
count n = length (filter digits n)
导入数据.Char
导入数据。列表
导入数据。函数
数字=任意((1整数
计数n=长度(过滤器数字n)
有人能帮我吗?你的问题可以分为以下几个方面
- 我想计算一个字符串中有多个数字的字数
- 我想在一个字符串中找到一个以上数字的单词
- 我想确定一个单词是否有多个数字
- 我想数一数一个字的位数
count :: String -> Int
count word = length $ filter isDigit n
然后,您需要确定一个单词是否有多个数字,这意味着它应该返回一个Bool
:
hasManyDigits :: String -> Bool
hasManyDigits word = count word > 1
然后,您要查找一个包含多个数字的句子中的字数:
wordsWithManyDigits :: String -> [String]
wordsWithManyDigits sentence = filter hasManyDigits $ words sentence
然后你要数一数
countWordsWithManyDigits :: String -> Int
countWordsWithManyDigits sentence = length $ wordsWithManyDigits sentence
words
函数在空格上拆分字符串,而Data.Char.isDigit
函数我认为是不言自明的
您可以将这些函数组合成一个函数,如下所示:
count :: String -> Int
count = length . filter ((> 1) . length . filter isDigit) . words
但我认为这会使它失去可读性,尽管它显示了Haskell很好地编写函数的能力