2016-04-29 8 views
-3

Ich habe eine Liste von Zeichenfolgen (siehe unten) wie verkette ich diese Zeichenfolgen in einer Liste mit einer Zeichenfolge.Verknüpfen Sie eine Liste von Strings zu einem String haskell

["hello","stack","overflow"] 

zu

["hellostackoverflow"] 

Ich bin gerade

Data.Char und Data.List zu importieren erlaubt
+0

Soll das Ergebnis eine Zeichenfolge oder eine Liste mit einer Zeichenfolge sein? – Lee

+0

'concat' - wenn Sie es in einer Liste möchten, verwenden Sie' return. concat '(vergiss die Type Annotation nicht, wenn du es in GHCi probierst:' return. concat $ ["Hallo", "stack", "overflow"] :: [String] ') – Carsten

+0

@Lee meinte ich eine Liste mit eine Schnur. danke, es hat funktioniert. Schreibe es als Antwort, damit ich es akzeptieren kann: D. – Memphis

Antwort

4

jede Zeichenfolge in einer Liste Betrachten wir als eine Liste von Zeichen

["hello","stack","overflow"] :: [[Char]] 

Verkettung ist ein Prozess der Verbindung mehrerer Listen zu einem. Es muss einen folgenden Typ haben:

concat :: [[a]] -> [a] 

Wenn Sie eine solche Funktion haben, erhalten Sie eine Hälfte Job erledigen. Sie suchen nach einem Weg,

["hellostackoverflow"] 

als Ergebnis der Verkettung zu bekommen. Wieder einmal sieht es Typ:

["hellostackoverflow"] :: [[Char]] 

Es ist die gleiche Art, wie Sie am Anfang hatte, außer, dass es nur ein Element in einer Liste ist. Sie brauchen also eine Funktion, die etwas in eine Liste bringt. Es muss

putToList :: a -> [a] 

einen Typ haben Sobald Sie beide concat und putToList Funktionen haben werden, wird Ihre Lösung fast fertig. Das Letzte, was Sie tun müssen, ist es so, zu komponieren:

myConcatenation = putToList . concat 

Ich schlage vor, Sie Hoogle nutzen vorhandene Funktion zur Suche nach seiner Art.

+0

'putToList = (: [])' – Kwarrtz

+0

@Kwarrtz ist es zu niedrigen Pegel. Besser zu verwenden [pure] (https://hackage.haskell.org/package/base-4.8.2.0/docs/Control-Applicative.html#v:pure) oder [return] (https: //hackage.haskell. org/package/base-4.8.2.0/docs/Control-Monad.html # v: return). – wowofbob

+0

Warum wäre die Verwendung einer "Low Level" -Funktion hier nachteilig? – Kwarrtz

1

Sie können auch die Liste monad verwenden, um die Liste auf eine einzelne Zeichenfolge zu reduzieren, und das Ergebnis dann in eine Liste umbrechen.

> [["hello", "stack", "overflow"] >>= id] 
["hellostackoverflow"] 

Die vorhergehende explizit von Control.Monad.join verwenden vermeidet:

> import Control.Monad 
> [join ["hello", "stack", "overflow"] 
["hellostackoverflow"] 
+1

'xs >> = id' und' joins xs' sind gleichbedeutend mit 'concat xs'. Warum unnötig eine einfache Operation komplizieren? – Kwarrtz

+0

@Kwarrtz Diese Antwort zeigt, wie das Ziel mit monadischen Eigenschaften von '[]' erreicht werden kann. Es geht nicht darum, wie es komplizierter wird. – wowofbob

-1

concat [ "Hallo", "Stack", "Überlauf"]

"hellostackoverflow"

Verwandte Themen