2017-02-21 3 views
2

Also ich versuche, eine Funktion zu schreiben, die Haskell eine Funktion schreiben Eingabefunktion auf Liste auszuführen

flist :: (a -> String) -> [a] -> String 
flist f ls = 

zum Beispiel "[" ++ (f l1) ++ "," ++ (f l2) ++ "," ++ ... ++ (f ln) ++ "]"

ls [l1, l2, ..., ln] und Ausgang eine Zeichenfolge, die eine Eingabefunktion f auf Eingabeliste führt:

>flist show [1, 2, 3] 

ausgeben würde "[1, 2, 3]"

>flist (fun x -> x) ["dog"] 

ausgeben würde "[dog]"

Ich versuchte foldl‘

flist f ls = "[" ++ (foldl' (++) f "," ls) ++ "]" 

zu verwenden, die nicht

Antwort

6

Hinweis zu funktionieren scheint:

  1. Produce [f x1,...,f xn] erste, f zu jeder Anwendung Mitglied.
  2. Dann schreiben Sie eine Funktion, die [y1,...,yn] und w dauert und erzeugt eine Verschachtelung [y1,w,y2,w,...,yn]. Dies kann durch Rekursion erfolgen. (Es gibt auch eine Bibliotheksfunktion dafür, aber es ist nicht wichtig.)
  3. Komponieren Sie beide, um [f x1, ",", ...] zu erhalten und dann das Ergebnis zu verketten.
  4. Fügen Sie dem resultierenden String Klammern hinzu.