Wie ersetze ich ein Zeichen durch mehrere Zeichen in einer Zeichenfolge. Ich kann mit unten, um ein Zeichen durch ein anderes Zeichen ersetzt werden:Haskell String ersetzen
replaceO [] = []
replaceO (x:xs) =
if x == '('
then '\n' : replaceO xs
else x : replaceO xs
Aber ich mag ersetzen '(' mit "\ n \ t \ t", nicht nur '\ n'
-. -------- UPDATE -------------- Basierend auf der Antwort unten, kann ich machen, dass eine Funktion, die einen String und gibt eine Zeichenfolge wie folgt akzeptiert:
ReplaceFun str :: String -> String
ReplaceFun str = do
concatMap (\str -> if str == '.' then "foo" else [str])
Das funktioniert nicht, kann jemand auf meinen Fehler hinweisen? Ich bin sehr neu in Haskell.
Hierist, was ich für verschachtelte Einbuchtung haben:
replaceO (x:xs) n l =
if x == '('
then "\n" ++ (showTabs n "-") ++ replaceO xs (n + 1) 'l'
else
if x == ')'
then "\n" ++ (showTabs n "-") ++ replaceO xs (n - 1) 'l'
else x : replaceO xs n 'l'
Sie haben 'concatMap' nicht genügend Argumente gegeben - die rhs von' replaceFun' (beachten Sie auch den Kleinbuchstaben) sollte den Typ 'String' haben, aber' concatMap (\ str -> if str == ').'then' foo 'else [str]) 'hat den Typ' String -> String'. Du willst wahrscheinlich 'replaceFun = concatMap (\ str -> wenn str == '.' Dann 'foo' else [str])' – user2407038