Haskell的新手,但在F#中,可以进行以下形式的模式匹配:
splitStr :: String -> String -> States -> String
splitStr ('\"':xs) acc (SentenceStart | SentenceMiddle) =
splitStr xs acc Quoting
Atom编辑器告诉我{-# LANGUAGE RegularPatterns #-}
在顶部添加编译指示以使上述工作有效。当我这样做时,它告诉我找不到扩展名。查看已知扩展名列表,似乎它不是RegularPatterns
最近添加的。我正在使用7.10.3
GHC版本。我也尝试过编译,但无法正常工作,因此Atom编辑器在这里没有错。
任何想法如何使这项工作?
据我所知,您有这些选择。
分割图案。除非右侧很大,否则这是最简单,最常见的选择。(当它很大时,我仍然会考虑为此专门定义一个辅助函数。)
splitStr ('\"':xs) acc SentenceStart = splitStr xs acc Quoting
splitStr ('\"':xs) acc SentenceMiddle = splitStr xs acc Quoting
使用花样护卫和where
。
splitStr ('\"':xs) acc s
| SentenceStart <- s = result
| SentenceMiddle <- s = result
where result = splitStr xs acc Quoting
使用视图模式
startOrMiddle SentenceStart = True
startOrMiddle SentenceMiddle = True
startOrMiddle _ = False
splitStr ('\"':xs) acc (True <- startOrMiddle) =
splitStr xs acc Quoting
使用模式同义词并查看模式
-- startOrMiddle as above
pattern StartOrMiddle = (True <- startOrMiddle)
splitStr ('\"':xs) acc StartOrMiddle = splitStr xs acc Quoting
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句