3

我想用 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)"
4

4 回答 4

6

您可以使用Text.Regex包。

您的示例可能如下所示:

import Text.Regex(mkRegex, subRegex)

subs :: String -> String -> String -> String
subs wildcard input value = subRegex (mkRegex wildcard) input value
于 2008-09-15T18:35:34.870 回答
2

请参阅http://bluebones.net/2007/01/replace-in-haskell/以获取与您正在寻找的代码完全一样的示例。

于 2008-09-15T18:38:07.457 回答
2

对于这种情况,您可以使用text-format-simple库:

import Text.Format
format "{0}^3 + {0} + sin({0})" ["6.2"]
于 2011-08-24T11:55:02.940 回答
1

使用正则表达式 ( Text.Regex.Posix) 和搜索替换/\Wx\W/(Perl 表示法)。简单地替换xto6.2会给你带来麻烦x + quux

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

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

于 2008-09-15T18:40:16.890 回答