2008-09-15 9 views
3

Theres est un petit problème que je veux résoudre avec Haskell: Laisser substituer une fonction qui change toutes les jokers dans une chaîne pour un paramètre concret. La fonction a de signature:Simple haskell string gérer

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

Répondre

6

Vous pouvez utiliser le package Text.Regex.

Votre exemple pourrait ressembler à ceci:

import Text.Regex(mkRegex, subRegex) 

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

Utilisez des expressions régulières (Text.Regex.Posix) et recherchez-remplacez /\Wx\W/ (notation Perl). Le simple remplacement de x à 6.2 vous apportera des problèmes avec x + quux.

Haskell Regex Replace pour plus d'informations (je pense que cela devrait être importé SO.

Pour noyau dur, vous pouvez analyser votre expression AST et faire le remplacement à ce niveau.

+0

@paullrulan. J'espère que vous n'êtes pas essayer de faire des mathématiques symboliques SANS un analyseur/AST appropriée les chaînes sont un cauchemar pour ça ... S'il vous plaît me dire tu n'es pas t essayant de substituer des variables lexicalement au lieu d'un AST ... –

2

supplémentaire Vous pouvez utiliser bibliothèque simple format texte pour de tels cas:

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