即使世界是一個小問題,我想哈斯克爾解決: 讓替代品改變所有的通配符在一個具體參數字符串的函數。該功能具有以下特徵:簡單哈斯克爾串管理
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