haskell und Stringlänge

8

Ich bin Neuling in Haskell, und ich habe eine Frage: Ich schreibe Code:

%Vor%

Dieser Code muss das erste "l" -Symbol in jedem Wort der Wortliste löschen, die empfangenen Wörter enthalten, die Länge der Ergebniszeichenfolge und div für die Anzahl der Wörter ermitteln.

Also in diesem Code muss ich erhalten: 13/3 = 4,333 ... ("listlolwordword" = 15, "istolwordword" = 13) aber ich empfange nur 4.

average :: [[Char]] -> Float funktioniert nicht, ich erhalte Fehler. wo mein Fehler? ps. Entschuldigung mein Englisch, bitte

    
knkill_prfl 14.07.2011, 22:14
quelle

1 Antwort

12

Die Funktion length gibt eine Int zurück, und die Funktion div führt eine ganzzahlige Division durch, dh sie löscht den Bruchteil. Wenn Sie ein Float Ergebnis haben möchten, müssen Sie zuerst das Ergebnis von length in ein Float umwandeln und dann (/) für die Division verwenden:

%Vor%

Wenn ich schon dabei bin, sollten Sie stattdessen den Mustervergleich in check in Erwägung ziehen, z. B .:

%Vor%

Dieser Stil ist sowohl lesbarer als auch weniger anfällig für Fehler - beispielsweise schlägt Ihre Version fehl, wenn eine leere Zeichenfolge angegeben wird.

    
C. A. McCann 14.07.2011, 22:21
quelle

Tags und Links