Wie konvertiere ich String in eine Liste von ganzen Zahlen in Haskell

7

Ich habe eine String like "1 2 3 4 5" . Wie kann ich es in eine Liste von ganzen Zahlen wie [1,2,3,4,5] in Haskell konvertieren? Was ist, wenn die Liste "12345" ist?

    
Rog Matthews 16.01.2012, 11:31
quelle

4 Antworten

21

Sie können

verwenden %Vor%

Hier verwenden wir words , um "1 2 3 4 5" auf Leerzeichen aufzuteilen, so dass wir ["1", "2", "3", "4", "5"] erhalten. Die Funktion read kann nun die einzelnen Strings in Ganzzahlen umwandeln. Es hat den Typ Read a => String -> a , sodass es tatsächlich in alles in der Klasse Read type konvertiert werden kann und das Int enthält. Aufgrund der Typvariablen im Rückgabetyp müssen wir den obigen Typ angeben.

Für die Zeichenfolge ohne Leerzeichen müssen wir jede Char in eine Liste mit einzelnen Elementen konvertieren. Dies kann durch Anwenden von (:"") geschehen - ein String ist nur eine Liste von Char s. Anschließend wenden wir read erneut wie zuvor an:

%Vor%     
Martin Geisler 16.01.2012, 11:42
quelle
8
%Vor%

Fehlerbehandlung ist als Übung übrig. (Hinweis: Sie benötigen einen anderen Rückgabetyp.)

    
dave4420 16.01.2012 11:35
quelle
2

Im Modul Data.Char ist eine Funktion definiert digitToInt . Es nimmt ein Zeichen und gibt eine Zahl zurück, solange das Zeichen als hexadezimale Ziffer interpretiert werden kann.

Wenn Sie diese Funktion in Ihrem ersten Beispiel verwenden möchten, wo die Zahlen durch ein Leerzeichen getrennt sind, müssen Sie die Leerzeichen vermeiden. Sie können das mit einem einfachen Filter tun

%Vor%

Das zweite Beispiel, bei dem die Ziffern gar nicht getrennt sind, ist noch einfacher, weil Sie keinen Filter benötigen

%Vor%

Ich denke, digitToInt ist besser als read , weil es nicht vom Typ des Ausdrucks abhängt, was schwierig sein könnte (was wiederum wie ich bin fand diesen Beitrag = P). Wie auch immer, ich bin neu in Haskell, also könnte ich auch falsch liegen =).

    
user1459377 22.12.2015 02:25
quelle
0

Sie können verwenden:

%Vor%     
Wrichik1999 02.12.2017 13:33
quelle

Tags und Links