www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

  1 2 nächste Seite

Viviane

Gepostet:
08.03.2011 18:00

Kleinbuchstaben in Großbuchstaben konvertieren  
So, folgendes: Ich habe eine Funktion, die einen String kriegen soll.
Sie soll die Kleinbuchstaben in Großbuchstaben konvertieren, den Rest aber so lassen wie er ist.

Dass das mit map funktioniert ist mir auch klar, ich möchte es aber ganz gerne über Listenfunktionen machen.

So weit bin ich schon:

capitalize :: String -> String
capitalize string = [(toUpper a) | a <- string, fromEnum 'a'>=97 && fromEnum 'a' <= 122]


Das funktioniert insofern ganz gut, als da die Kleinbuchstaben tatsächlich konvertiert werden - beim Rest kommt aber eben nur Bockmist raus.
Gibt es eine Möglichkeit, wie man mit Listenbeschreibungen verschiedene Fälle abhandeln kann?

Grüße


Viviane
Zum Seitenanfang ICQ    
 
domjoe

Gepostet:
09.03.2011 09:39

   
Bin ja auch noch kein Experte, aber ich würde jeden Buchstaben einzeln behandeln! Allerdings kannst du so nur die Dinge ausgeben und behandeln welche dem Guard entsprechen.

capitalize :: [Char] -> [Char]
capitalize (x:xs) = [(toUpper a) | a <- (x:xs), fromEnum a >= 97 && fromEnum a <= 122]

Das was du möchtest, musst du meiner bescheidenden Meinung nach anders lösen!

Grüße

domjoe
Zum Seitenanfang    
 
domjoe

Gepostet:
09.03.2011 09:59

   
Funktioniert vielleicht dies?:

capitalize :: [Char] -> [Char]
capitalize (x:xs) = [(toUpper a) | a <- (x:xs), isAlpha a]
Zum Seitenanfang    
 
domjoe

Gepostet:
09.03.2011 10:07

   
Bei welchen Zeichen kommt bei Dir eigentlich "Bockmist" raus? Bei mir funktioniert deine Funktion! Fragezeichen, Unterstrich, Prozentzeichen, Ausrufezeichen, alles wird richtig angezeigt!
Zum Seitenanfang    
 
Viviane

Gepostet:
09.03.2011 11:52

   
Gib als eingabe mal "String" ein, dann weiß er nicht was er mit dem S am Anfang anstellen soll, denn das ist ja schon groß.

Grüße

Viviane
Zum Seitenanfang ICQ    
 
domjoe

Gepostet:
09.03.2011 17:21

   
Bei mir gibt er das komplette Wort in Großbuchstaben aus! Bei allen drei Varianten die wir jetzt haben! Im Grunde sind sie ja auch alle gleich! Ich benutze übrigens die Haskell Plattform 2010.2.0.0
Zum Seitenanfang    
 
domjoe

Gepostet:
09.03.2011 17:31

   
Probier mal den:

capitalize''' :: [Char] -> [Char]
capitalize''' xs = [if isAlpha a && isLower a then toUpper a else a | a <- xs]
Zum Seitenanfang    
 
Viviane

Gepostet:
09.03.2011 18:45

   
Warte mal......hm an sich müsst ich jetzt meckern wart mal dann geh ich selbst nochmal drüber.....ich kann da ne if-then-else -Abfrage vorne reinbauen?

Das wollte ich doch die ganze Zeit wissen, ich wusste nich wo ich die Fallunterscheidungen machen soll, danke!
Zum Seitenanfang ICQ    
 
Viviane

Gepostet:
14.03.2011 19:28

   
So.

Bin endlich mal dazu gekommen

isAlpha und isLower kennt mein ghci nicht, hast Du die Dir selbst geschrieben?

Habe es dann wie folgt probiert:

capitalize''' :: [Char] -> [Char]
capitalize''' xs = [if fromEnum 'a'>=97 && fromEnum 'a' <= 122 then toUpper a else a | a <- xs]

Das funktioniert auch insoweit als das Programm läuft allerdings liefert capitalize''' "String" als Ausgabe "3TRING", offenbar kann kann er also mit dem Großbuchstaben nicht umgehen bzw. interpretiert die else-Anweisung falsch.

Woran kann das liegen?

Grüße

Viviane

edit: Gefunden was isAlpha usw. machen, verstehe nur jetzt nicht warum mein Interpreter das mit "not in scope" kommentiert der müsste das doch kennen?
Zum Seitenanfang ICQ    
 
domjoe

Gepostet:
15.03.2011 09:11

   
Um diese Methoden nutzen zu können, musst du das Modul Char importieren. Das machst du, indem du am Anfang deiner Datei in der ersten Zeile

import Char

schreibst!

In deiner Methode würde ich auch die einfachen Anführungszeichen weglassen, du fragst nämlich meiner Meinung nach ob der Kleinbuchstabe a innerhalb des Ascii-Intervals liegt und nicht nach dem, was in der Variable a drin ist! Deine Abfrage ist somit immer wahr!

Grüße

domjoe
Zum Seitenanfang    
 

  1 2 nächste Seite