函数的多个参数
Multiple parameters of a function
如何给予
break (== ' ') xxs
不改变定义的多个布尔参数?或者那是不可避免的。例如
break (== (' ' || '\t' || '\n')) xss
foldl
和foldr
是一种方式,但是这里不适用,至少我没用过。
这是您要找的吗?
break (\x -> x == ' ' || x == '\t' || x == '\n') xss
您当前的问题并不是关于多个参数,而是 break
的不同谓词。让我们考虑一下 break
的类型:
break :: (a -> Bool) -> [a] -> ([a], [a])
这种类型的函数 (a -> Bool)
称为 谓词 。您可以使用任何使用右 a
和 returns 和 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
如何给予
break (== ' ') xxs
不改变定义的多个布尔参数?或者那是不可避免的。例如
break (== (' ' || '\t' || '\n')) xss
foldl
和foldr
是一种方式,但是这里不适用,至少我没用过。
这是您要找的吗?
break (\x -> x == ' ' || x == '\t' || x == '\n') xss
您当前的问题并不是关于多个参数,而是 break
的不同谓词。让我们考虑一下 break
的类型:
break :: (a -> Bool) -> [a] -> ([a], [a])
这种类型的函数 (a -> Bool)
称为 谓词 。您可以使用任何使用右 a
和 returns 和 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