函数的多个参数

dim*_*im8 4 parameters haskell arguments function fold

怎么给

break (== ' ') xxs
Run Code Online (Sandbox Code Playgroud)

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

break (== (' ' || '\t' || '\n')) xss
Run Code Online (Sandbox Code Playgroud)

foldl并且foldr是单向的,但在这里它们不适用,或者至少我无法使用它们.

Mat*_*att 11

这是你想要的?

break (\x -> x == ' ' || x == '\t' || x == '\n') xss
Run Code Online (Sandbox Code Playgroud)


Zet*_*eta 5

您当前的问题实际上不是关于多个参数,而是关于不同的谓词break.让我们考虑break一下第二种类型:

break :: (a -> Bool) -> [a] -> ([a], [a])
Run Code Online (Sandbox Code Playgroud)

这种类型的函数(a -> Bool)称为谓词.你可以使用任何使用右边的东西a并返回一个Bool.这就是你的第一个代码类型检查的原因:

ghci> :t (== ' ')
(== ' ') :: Char -> Bool
Run Code Online (Sandbox Code Playgroud)

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

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

predicate :: Char -> Bool
predicate c = c `elem` yourCharacters
Run Code Online (Sandbox Code Playgroud)

我们可以使用它作为谓词break:

myBreak = break (`elem` yourCharacters)
Run Code Online (Sandbox Code Playgroud)

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

myBreak' :: [Char] -> [Char] -> ([Char], [Char])
myBreak' limiters = break (`elem` limiters)
-- myBreak' limiters str = break (`elem` limiters) str
Run Code Online (Sandbox Code Playgroud)

HTH