检查字符串是否包含特定字符

Pla*_*Pro 4 haskell

我需要检查我的字符串是否包含特定字符.

我试过这个:

charFound :: Char -> String -> Bool
charFound c s = filter(\x -> x == c) s
Run Code Online (Sandbox Code Playgroud)

但它给了我:

无法将预期类型Bool与实际类型匹配[Char]

我知道那个过滤器:

返回一个由列表成员(第二个参数)构成的列表,它满足第一个参数给出的条件.

我怎么能达到目标并返回一个布尔而不是列表?

fuz*_*fuz 10

出于您的目的,您可以使用elem :: Eq a => a -> [a] -> Bool前奏中的功能.它完全符合它在标签上所说的内容.要实现这个功能,我会使用这样的东西:

elem = any . (==)
Run Code Online (Sandbox Code Playgroud)

甚至更基本的:

elem x = foldr ((||) . (x ==)) False
Run Code Online (Sandbox Code Playgroud)

请注意,由于其短路行为,(||)只要x找到它,也可以使用无限列表.


Bak*_*riu 7

类型filter(a -> Bool) -> [a] -> [a].

你提供了第一个有类型Char -> Bool(正确)的参数,然后是第二个参数,它是String(那是[Char])正确的,所以类型filter (\x -> x == c) s[Char].

但是你提供的类型签名表示函数返回a Bool,它与返回的实际类型不匹配.

您可能想要使用any而不是filter.它的类型是(a -> Bool) -> [a] -> Bool.


当且仅当列表的所有元素都满足传递的谓词时all,还有一个函数返回True.您也可以考虑函数orand给定[Bool]计算值的分离或结合的函数.所以any f = or . map fall f = and . map f.

对于所有与列表相关的功能,请参阅Data.List模块.