简单的Haskell字符串管理

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个回答

6
您可以使用Text.Regex包来实现。例如,您的代码可能如下所示:
import Text.Regex(mkRegex, subRegex)

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

2
您可以使用 text-format-simple 库来处理此类情况:
import Text.Format
format "{0}^3 + {0} + sin({0})" ["6.2"]

2

1

使用正则表达式(Text.Regex.Posix)和搜索替换/\Wx\W/(Perl符号)。仅仅将x替换为6.2会给你带来x + quux的麻烦。

请参阅Haskell Regex Replace以获取更多信息(我认为这应该被导入到SO中)。

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


@paullrulan:我希望你不是在没有适当的解析器/AST的情况下尝试进行符号数学运算。对于这种情况,字符串是一场噩梦...请告诉我你不是在尝试使用词法替换变量而不是AST... - Jared Updike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接