Domanda

C'è un piccolo problema che voglio risolvere con Haskell:sostituiamo una funzione che modifica tutti i caratteri jolly in una stringa con un parametro concreto.La funzione ha la firma di:

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)"
È stato utile?

Soluzione

Potresti usare il Text.Regex pacchetto.

Il tuo esempio potrebbe assomigliare a questo:

import Text.Regex(mkRegex, subRegex)

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

Altri suggerimenti

Puoi usare formato testo semplice biblioteca per questi casi:

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

Vedere http://bluebones.net/2007/01/replace-in-haskell/ per un esempio che assomiglia esattamente al pezzo di codice che stai cercando.

Utilizza le espressioni regolari (Text.Regex.Posix) e cerca-sostituisci /\Wx\W/ (Notazione Perl).Semplicemente sostituendo x A 6.2 ti porterà problemi x + quux.

Sostituisci Haskell Regex per ulteriori informazioni (penso che questo dovrebbe essere importato in SO.

Per un approccio più hardcore potresti analizzare la tua espressione come AST ed eseguire la sostituzione a quel livello.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top