2012-03-25 5 views
0

ich einen Hinweis mag, wie Sie diese Funktion anwenden:Merging/Die Kombination eine Liste von ganzen Zahlen mit Char [Haskell]

dti xs = (map intToDigit (take 6 (map digitToInt xs))++['/']++map intToDigit(drop 6 (map digitToInt xs)))

auf einer Liste von ganzen Zahlen, z .; [1234567822,3245336792, ...], also würde ich eine Ausgabe wie ["123456/7822", "324533/6792", ...] bekommen.

Der Punkt ist, ein "/" nach der 6. Ziffer in jeder Nummer einer Liste von ganzen Zahlen hinzuzufügen, z. [1234567822,3245336792, ...]. Vielleicht gibt es einen besseren Weg als ich.

+1

Eine Lösung mit 'splitAt' könnte eleganter sein als eine Kombination aus' take' und 'drop'. – Joni

+0

Danke @JoniSalonen. – baron

Antwort

2

intToDigit erwartet eine einzelne Ziffer, so wird es einen Fehler bei der Eingabe wie 1234567822.

Um ein Int (oder Integer) zu umwandeln in eine Liste von Zeichen zu erhöhen, Sie show, und dann teilen Sie die resultierende Zeichenfolge verwenden können, nach sechs Ziffern

format n = first ++ '/':second 
    where 
    s = show n 
    (first,second) = splitAt 6 s 

dti = map format 
+0

Ich kenne Code wie 'first ++ '/': second' ist idiomatisch, aber manchmal wünsche ich, dass das Idiom' first ++ "/" ++ second' wäre. –

+0

kann ich das verstehen. Aber ich kann mich nicht dazu durchringen, ein einzelnes Zeichen in eine Liste zu verpacken, um es sofort wieder herauszunehmen und es an die Spitze einer anderen Liste zu setzen. Das ist so indirekt. –

+0

Vielen Dank @DanielWagner. – baron

Verwandte Themen