【发布时间】:2019-05-18 07:10:42
【问题描述】:
假设我有一个函数f :: String -> String 并且想要匹配表单的参数
_ ++ "bar"
其中_ 是我想返回的未指定字符串。换句话说,我想匹配foobar 和bazbar 之类的参数,并分别返回foo 和baz。
使用ViewPatterns 可以如下实现:
{-# LANGUAGE ViewPatterns #-}
f :: String -> String
f x@(reverse . take 3 $ reverse -> "bar") = take (n-3) x
where n = length x
...但这远非理想。主要是因为如果我决定要组合两个或多个这样的模式,事情会很快变得棘手。
理想情况下,我希望能够写出这样的东西:
f (x:"bar") = x
但不幸的是,这不是有效的 Haskell。
ViewPatterns 或其他扩展中是否有适当的解决方案?
【问题讨论】:
-
正则表达式怎么样?它们可以包含结束字符串锚点,您可以只匹配初始段,例如“(.*)bar$”
-
我不知道 Haskell 中的正则表达式。那会是什么样子?
-
也许是时候写一个真正的解析器了。 (我敢打赌你问这个是因为它是一段更大的代码的一部分,实际上是在进行解析。)See also.
-
打开一扇深入了解这个问题的窗口:
f (x ++ y) = (x,y)计算什么?
标签: haskell