Simple chaîne de haskell gérer
Question
Voici un petit problème que je veux résoudre avec Haskell: laissez substituer une fonction qui change tous les caractères génériques dans une chaîne pour un paramètre concret. La fonction a la signature de:
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)"
La solution
Vous pouvez utiliser le package Text.Regex .
Votre exemple pourrait ressembler à quelque chose comme ceci:
import Text.Regex(mkRegex, subRegex)
subs :: String -> String -> String -> String
subs wildcard input value = subRegex (mkRegex wildcard) input value
Autres conseils
Vous pouvez utiliser la bibliothèque text-format-simple pour de tels cas:
import Text.Format
format "{0}^3 + {0} + sin({0})" ["6.2"]
Voir http://bluebones.net/2007/01/replace-in -haskell / pour un exemple qui ressemble exactement au morceau de code que vous recherchez.
Utilisez des expressions régulières ( Text.Regex.Posix
) et recherchez-remplacez / \ Wx \ W /
(notation Perl). Remplacer simplement x
par 6.2
vous posera des problèmes avec x + quux
.
Remplacer Haskell Regex pour plus d'informations (je pense que cela devrait être importé à SO.
Pour les plus durs, vous pouvez analyser votre expression en tant qu’AST et effectuer le remplacement à ce niveau.