我在使用isUpper,isLower和isDigit时遇到麻烦。具体来说,我正在尝试获取一个字符串,并为包含三个 bool 值的字符串中的每个字符返回一个元组列表,以了解该字符是大写字母,小写字母还是数字。因此,字符串“Ab2”将返回列表[(True,False,False),(False,True,False),(False,False,True)]。这就是我所拥有的:

import Data.Char
uppercaseList :: [a] -> [(Bool, Bool, Bool)]
uppercaseList xs = [(isUpper, isLower, isDigit)]

我想我需要将字符串的字符传递给isUpper,isLower和isDigit,但是我不知道该怎么做。很抱歉,这是一个愚蠢的问题,但是到目前为止,我发现的任何信息都无法解决我的困惑。

最佳答案

您需要检查列表的每个元素(xs)。通常,这种任务是通过使用map完成的

import Data.Char
uppercaseList :: String -> [(Bool, Bool, Bool)]
uppercaseList xs = map (\x -> (isUpper x, isLower x, isDigit x)) xs

或列表理解
uppercaseList xs = [ (isUpper x, isLower x, isDigit x) | x <- xs ]

或从头开始
uppercaseList [] = []
uppercaseList (x:xs) = (isUpper x, isLower x, isDigit x) : uppercaseList xs

关于haskell - 在Haskell中使用isUpper,isLower和isDigit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46211868/

10-11 19:17