简单的Haskell字符串管理

时间:2020-03-05 18:53:58  来源:igfitidea点击:

我想用Haskell解决一个小问题:
让我们用一个更改字符串中所有通配符的函数代替一个具体参数。该函数具有以下特征的签名:

subs :: String -> String -> String -> String
-- example:
-- subs 'x' "x^3 + x + sin(x)" "6.2" will generate
--          "6.2^3 + 6.2 + sin(6.2)"

解决方案

回答

我们可以使用Text.Regex包。

示例可能如下所示:

import Text.Regex(mkRegex, subRegex)

subs :: String -> String -> String -> String
subs wildcard input value = subRegex (mkRegex wildcard) input value

回答

有关示例,请参阅http://bluebones.net/2007/01/replace-in-haskell/,该示例与所需的代码完全相同。

回答

使用正则表达式(" Text.Regex.Posix")和" / \ Wx \ W /"(Perl表示法)的搜索替换。只需将x替换为6.2会给我们带来x + quux的麻烦。

Haskell Regex Replace以获得更多信息(我认为这应该导入到SO中。

如果需要额外的支持,我们可以将表达式解析为AST并在该级别上进行替换。