Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Haskell中使用多个数字对数字进行计数的函数_Haskell - Fatal编程技术网

在Haskell中使用多个数字对数字进行计数的函数

在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) .

我正在尝试编写一个函数,用于计算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) . 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很好地编写函数的能力