kil*_*tek 2 parsing haskell concatenation filter
exchangeSymbols "a§ b$ c. 1. 2. 3/" = filter (Char.isAlphaNum) (replaceStr str " " "_")
Run Code Online (Sandbox Code Playgroud)
上面的代码应该首先用""替换所有"空格_
",然后按照过滤字符串Char.isAlphaNum
.不幸的是,这Char.isAlphaNum
部分吸收了已经交换的"_",这不是我的意图,我想持有" _
".所以,我认为只需在过滤器中添加一个例外就好了:
exchangeSymbols "a§ b$ c. 1. 2. 3/" = filter (Char.isAlphaNum && /='_') (replaceStr str " " "_")
Run Code Online (Sandbox Code Playgroud)
你看到添加了&& not /='_'
.它产生了一个parse error
,显然连接过滤器选项并不是那么容易,但有一个聪明的解决方法吗?我想过包装过滤器功能,就像每次递归1000次左右一样,添加一个新的过滤器测试(/='!')
,(/='§')
等等而不添加(/='_')
.然而,它似乎不是一个方便的解决方案.
写作
... filter (Char.isAlphaNum && /='_') ...
实际上是一个类型错误(它产生解析错误的原因可能是您使用/ =作为前缀 - 但它是一个中缀运算符).不能合并功能与(&&)
自其针对布尔(不是函数)的运营商.
实际上,这段代码应该是:
... filter (\c -> Char.isAlphaNum c && c /= '_') ...
归档时间: |
|
查看次数: |
387 次 |
最近记录: |