我希望你能帮我解决一个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"]
使用正则表达式(Text.Regex.Posix
)和搜索替换/\Wx\W/
(Perl符号)。仅仅将x
替换为6.2
会给你带来x + quux
的麻烦。
请参阅Haskell Regex Replace以获取更多信息(我认为这应该被导入到SO中)。
对于额外的硬核,您可以将表达式解析为AST并在该级别上进行替换。