2008-09-15 65 views
3

即使世界是一个小问题,我想哈斯克尔解决: 让替代品改变所有的通配符在一个具体参数字符串的函数。该功能具有以下特征:简单哈斯克尔串管理

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)" 

回答

6

您可以使用Text.Regex包。

你的例子可能是这个样子:

import Text.Regex(mkRegex, subRegex) 

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

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

Haskell Regex Replace更多信息,(我想这应该是SO进口。

对于额外的硬核,你可以分析你的表达AST和做该级别的替代品。

+0

@paullrulan:我希望你是不是尝试做符号数学没有一个适当的解析器/ AST字符串是一个噩梦......请告诉我你不是t试图用词汇来代替变量,而不是用AST来代替...... – 2008-10-06 00:48:55

2

您可以使用文本格式简单库这样的情况:

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