www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

chrisslater

Gepostet:
06.12.2008 14:52

Strings in anderen Typ umwandeln  
Hallo
ich habe das Programm vtToPre

data VTree =
S |
W |
V VTree VTree VTree VTree
deriving Show

vtToPre :: VTree -> String
vtToPre S = "S"
vtToPre W = "W"
vtToPre (V b1 b2 b3 b4) ="V "++ vtToPre b4 ++" "++ vtToPre b3++" "++ vtToPre b2++" "++ vtToPre b1

welches einen Wert vom Typ VTree in einem Wert vom Typ String ausgibt.

Meine Frage ist jetzt wie man diesen Vorgang umdreht, d.h. man gibt einen Wert vom Typ String ein und erhält als Ausgabe einen Wert vom Typ VTree?

Zum Seitenanfang    
 
DaP

Gepostet:
06.12.2008 20:41

   

schau dir mal die funktion "concat" an, so hab ich es gemacht
Zum Seitenanfang    
 
chrisslater

Gepostet:
06.12.2008 21:33

   
Wie soll das denn mit concat funktionieren?

Also bin jetzt jedenfalls so weit:

data VTree =
S |
W |
V VTree VTree VTree VTree
deriving Show

preToVt :: String -> VTree
preToVt "S" = S
preToVt "W" = W
preToVt ("V" ......) = .......

bei der Zeile weiß ich nicht wie ich weitermachen kann und bin auch nicht sicher wie genau da concat zum Einsatz kommen soll
Zum Seitenanfang    
 
DaP

Gepostet:
06.12.2008 22:27

   
dein ansatz von oben war doch ganz gut!

"V "++ vtToPre b4 ++" "++ vtToPre b3++" "++ vtToPre b2++" "++ vtToPre b1


Bsp:
concat [“Hello“,“ “,“World“]
“Hello World“


also du klammerst das von oben ein, setzt nen concat davor und statt dem ++ machst du ein komma, die leerzeichen kannst du dir sparen


wie kommst du mit den restlichen aufgaben klar?

Zum Seitenanfang    
 
chrisslater

Gepostet:
06.12.2008 23:07

   
vielleicht versteh ich ja da was falsch, aber wenn ich concat auf meine Funkton anwende, erhalte ich doch als Ausgabe einen Wert vom Typ String und das will ich doch gar nicht. Es soll ein Wert vom Typ VTree rauskommen. Mein Problem ist ja erstmal die Eingabe. Ich muss ja erstmal eine Variable bzw 4 Variablen (V b1 b2 b3 b4) vom Typ String eingeben und die 4 Variablen können entweder den Wert "S" oder "W" annehmen, nur weiß ich nicht wie ich das machen soll.
Deswegen versteh ich auch die Anwendung der Funktion concat an dieser Stelle nicht.

Was ich möchte ist: Ich gebe jetzt ein preToVt "V W S W S" und möchte als Ausgabe V S W S W erhalten. Das kann concat aber nicht erreichen. Ich hoffe du verstehst jetzt mein Problem.
Zum Seitenanfang    
 
DaP

Gepostet:
06.12.2008 23:24

   
ähm, also in deinem ersten beitrag ging es ja auchnoch um die funktion vtToPre und da sollte ein string raus kommen

vtToPre :: VTree -> String

mein lösungsvorschlag mit concat war darauf bezogen
Zum Seitenanfang    
 
chrisslater

Gepostet:
06.12.2008 23:26

   
ach so Ok. Die hatte ich ja schon gelöst. Mir gings dann nur darum das Problem mit String zu VTree zu lösen.
Zum Seitenanfang    
 
Siracusa

Gepostet:
07.12.2008 00:36

   
Hallo,

mein Vorschlag wäre eine Hilfsfunktion zu schreiben, die den String und eine Liste von VTrees als Parameter erhält, die die bisher gelesenen Bäume speichert. Wenn ein 'S' oder 'W' gelesen wird, wird S oder W in die Liste gepackt. Bei einem 'V' werden vier Bäume von der Liste genommen, mit V zu einem neuen Baum zusammengefügt und der entstandene Baum wieder auf die Liste geschrieben. Wenn so der ganze String gelesen wurde, sollte genau ein Baum auf der Liste sein und das ist dann das Ergebnis.


Viele Grüße,

Siracusa
Zum Seitenanfang