我正在寻找打破字符串的功能(基于自己的条件,例如" ab"," c"," 3",&#34 ; 21")" abc321c"进入这个字符串(" ab"," c"," 3"," 21"," c")。
haskell中的break函数只接受一个条件(并且只接受char而不是字符串)并且只将它应用于列表中的第一个char。
*Main> break ('-'==) "teasd-das-d"
("teasd","-das-d")
答案 0 :(得分:1)
你可以像这样明确地写出来:
break (\c -> (isUpper c || isDigit c)) ...
或者这样:
break (\c -> or $ map ($c) [isUpper, isDigit]) ...
这意味着如果你有这个辅助函数:
orF :: [a -> Bool] -> a -> Bool
orF fs a = or $ map ($a) fs
然后break
电话变为:
break (orF [isUpper,isDigit, (=='-')]) ...
这里可能会使用一些类别理论运算符,但这是一种直接的方法。
<强>更新强>
如果你想获得幻想,你可以这样做:
import Control.Applicative
break (liftA2 (||) isUpper isDigit) ...
要将多个条件链接在一起,可能会定义一个运算符:
(|||) = liftA2 (||)
然后:
break (isUpper ||| isDigit ||| (=='-')) ...
答案 1 :(得分:0)
您可能正在regex-compat库中寻找splitRegex
import Text.Regex
> splitRegex (mkRegex "-") "eat-more-noodles"
["eat", "more", "noodles"]
> splitReges (mkRegex "(-|\\+)") "also+eat-barley"
["also", "eat", "barley"]
如您所见,正则表达式可以允许更丰富的分隔符......