Gepostet: |
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 | |||||||||||
Gepostet: |
|||||||||||
schau dir mal die funktion "concat" an, so hab ich es gemacht |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
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 | |||||||||||
Gepostet: |
|||||||||||
dein ansatz von oben war doch ganz gut!"V "++ vtToPre b4 ++" "++ vtToPre b3++" "++ vtToPre b2++" "++ vtToPre b1 Bsp: concat [“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 | |||||||||||
Gepostet: |
|||||||||||
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 | |||||||||||
Gepostet: |
|||||||||||
ä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 | |||||||||||
Gepostet: |
|||||||||||
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 | |||||||||||
Gepostet: |
|||||||||||
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 | |||||||||||