String 简单haskell字符串管理

String 简单haskell字符串管理,string,haskell,String,Haskell,我想用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

我想用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
请参阅,以获取与您要查找的代码完全相同的示例。

使用正则表达式(
Text.Regex.Posix
)并搜索替换以查找
/\Wx\W/
(Perl表示法)。简单地将
x
替换为
6.2
会给
x+quox
带来麻烦

有关更多信息(我认为应将其导入SO)


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

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

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

@paullrulan:我希望你不要在没有合适的解析器/AST的情况下尝试进行符号数学。字符串是一个噩梦……请告诉我,你不是在尝试用词汇替换变量,而不是用AST替换变量。。。