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)"
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top