函数的多个参数

时间:2015-05-30 19:03:32

标签: function haskell parameters arguments fold

如何提供

break (== ' ') xxs

多个布尔参数而不更改定义?或者这是不可避免的。例如

break (== (' ' || '\t' || '\n')) xss

foldlfoldr是单向的,但在这里它们不适用,或者至少我无法使用它们。

2 个答案:

答案 0 :(得分:11)

这是你在找什么?

break (\x -> x == ' ' || x == '\t' || x == '\n') xss

答案 1 :(得分:5)

您当前的问题并非真正涉及多个参数,而是break的不同谓词。我们暂时考虑break的类型:

break :: (a -> Bool) -> [a] -> ([a], [a])

此类函数(a -> Bool)称为谓词。您可以使用使用右a的任何内容并返回Bool。这就是你的第一个代码类型检查的原因:

ghci> :t (== ' ')
(== ' ') :: Char -> Bool

现在,如果您想使用多个字符作为可能的中断符号,则需要使用另一个Char -> Bool。如果字符已修复(并且您没有多个字符),则可以使用列表[Char]elem

yourCharacters = [' ','\t','\n'] 

predicate :: Char -> Bool
predicate c = c `elem` yourCharacters

我们可以将其用作break

的谓词
myBreak = break (`elem` yourCharacters)

此时,您还可以更改myBreak,以便它需要一个字符列表,此时您将获得:

myBreak' :: [Char] -> [Char] -> ([Char], [Char])
myBreak' limiters = break (`elem` limiters)
-- myBreak' limiters str = break (`elem` limiters) str

HTH