我想用 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)"
有帮助吗?

解决方案

你可以使用 文本正则表达式 包裹。

您的示例可能如下所示:

import Text.Regex(mkRegex, subRegex)

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

其他提示

您可以使用 简单文本格式 针对此类情况的库:

import Text.Format
format "{0}^3 + {0} + sin({0})" ["6.2"]

http://bluebones.net/2007/01/replace-in-haskell/ 一个看起来与您正在寻找的代码片段完全相同的示例。

使用正则表达式(Text.Regex.Posix) 并搜索替换 /\Wx\W/ (Perl 表示法)。只需更换 x6.2 会给你带来麻烦 x + quux.

Haskell 正则表达式替换 欲了解更多信息(我认为这应该导入到 SO.

对于额外的硬核,您可以将表达式解析为 AST 并在该级别上进行替换。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top