2017-08-30 2 views
0

Ich hoffe, es geht dir sehr gut.Haskell - Probleme beim Analysieren zu verdoppeln

Ich fing gestern mit dem Haskell an und heute bin ich auf einer Funktion stecken geblieben, bei der ich durchschnittlich die Länge jedes Wortes machen möchte. Das Problem, das ich habe, ist, dass Medellangd immer zu 0,0 bewertet wird, egal was. Sowohl die Variable Leerzeichen als auch die Variable listLength sind immer 0.0, egal welche Eingabe gegeben wird.

medellangd :: String -> Double 
spaces = fromIntegral (raknaBokstaver [] ' ') 
listLength = fromIntegral (length []) 

medellangd [] = 0.0 
medellangd _ = (listLength-spaces)/(spaces + 1) 

Getestet habe ich die Funktion raknaBokstaver :: String -> Char -> Int, in dem Terminal, und es ganz gut gearbeitet. Die Länge Funktion funktionierte genau so, wie man es auch erwarten würde.

Bin ich missbrauchen die von Integral Funktion? Warum werden Leerzeichen und listLength beide zu 0,0 ausgewertet?

Vielen Dank im Voraus.

+2

Uhm, Räume als Konstante 'fromIntegral (raknaBokstaver [] '‚) 'denen erklärt wird, hängt überhaupt nicht von irgendeiner Eingabe ab. Per Definition überprüft 'medellangd' auch, ob die Eingabeliste leer ist, und gibt die Konstante 0.0 zurück, andernfalls löscht sie die Eingabeliste (das ist, was' _' tut) und gibt eine andere Konstante zurück. Ich nehme an, du willst 'medellangd xs = ...', wo du irgendwie die Eingangsliste 'xs' verwendest. – chi

+0

Hallo. Richtig, ich habe jetzt alles wie geplant funktioniert, vielen Dank für Ihre Antwort. – Augman

+0

Sie dürfen åäö übrigens benutzen, es sei denn, Ihr Editor ist schrecklich veraltet. – SwiftsNamesake

Antwort

1

Sie etwas Ähnliches wie diese wollen werde (Ich habe versucht, es in der Nähe Ihrer aktuellen Lösung zu halten):

medellangd :: String -> Double 
medellangd [] = 0.0 
medellangd xs = (listLength - spaces)/(spaces + 1) where 
    spaces = fromIntegral (raknaBokstaver xs) 
    listLength = fromIntegral (length xs) 
+0

Vielen Dank. Ich bin an diesem Wochenende auf dieses _where_ Keyword und die Bedeutung davon gestoßen, aber ich werde es mehr verwenden. Danke für die Antwort, es hat mir wirklich geholfen. – Augman

+0

@Augman Friendly Hinweis: Akzeptieren Sie diese Antwort, wenn es hilfreich war – SwiftsNamesake

Verwandte Themen