即使世界是一个小问题,我想哈斯克尔解决: 让替代品改变所有的通配符在一个具体参数字符串的函数。该功能具有以下特征:简单哈斯克尔串管理
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)"
即使世界是一个小问题,我想哈斯克尔解决: 让替代品改变所有的通配符在一个具体参数字符串的函数。该功能具有以下特征:简单哈斯克尔串管理
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)"
您可以使用Text.Regex包。
你的例子可能是这个样子:
import Text.Regex(mkRegex, subRegex)
subs :: String -> String -> String -> String
subs wildcard input value = subRegex (mkRegex wildcard) input value
为它看起来完全一样的代码你正在寻找一个例子见http://bluebones.net/2007/01/replace-in-haskell/。
使用正则表达式(Text.Regex.Posix
)和搜索替换为/\Wx\W/
(Perl符号)。只需将x
更换为6.2
将为x + quux
带来麻烦。
Haskell Regex Replace更多信息,(我想这应该是SO进口。
对于额外的硬核,你可以分析你的表达AST和做该级别的替代品。
您可以使用文本格式简单库这样的情况:
import Text.Format
format "{0}^3 + {0} + sin({0})" ["6.2"]
@paullrulan:我希望你是不是尝试做符号数学没有一个适当的解析器/ AST字符串是一个噩梦......请告诉我你不是t试图用词汇来代替变量,而不是用AST来代替...... – 2008-10-06 00:48:55