Veröffentlicht 27. Januar 201114 j Hallo User, ich programmiere etwas in Haskell und habe folgendes problem. Das ist meine Funktion: give [] = "Hallo" give (x:[]) = "Wie" give (x:xs) = x:xs einzelt funktionieren die funktionen, aber wie füge ich die so zusammen, dass es auch funktioniert wenn die Funktionen in einem Programm zusammen stehen? Ich hoffe ihr habt mich verstanden! Bei Fragen gerne fragen^^ Mfg reyman
28. Januar 201114 j Was meinst Du mit Funktionen? Ich sehe nur eine Funktion (give), mal abgesehen von dem vordefinierten cons. Was genau funktioniert dabei nicht? Edit: Ich habe es mal ausprobiert und es funktioniert genau so wie es da steht: Main> give [] "Hallo" *Main> give "A" "Wie" *Main> give "AA" "AA" Ich sehe jetzt das Problem nicht. Bearbeitet 28. Januar 201114 j von Ezra
28. Januar 201114 j Okai ich versuche es etwas besser zu erklären. Ich suche eine Funktion, die: 1.Wenn eine Liste leer ist, soll "Hallo" ausgegeben werden 2.Wenn eine Liste nur einen Kopf hat soll "Wie" ausgegeben werden 3.Wenn eine Liste einen Kopf und einen Rest hat, soll der Inhalt der Liste unverändert wiedergegeben werden Das oben waren meine Ansätze mich dieser Funktion zu nähren. Ich hoffe du hast jetzt verstanden was ich machen möchte. Danke im vorraus mfg reyman P.s Das "Hallo" oder "Wie" ist egal, es soll einfach nur ein vordefinierter Satz ausgegeben werden Bearbeitet 28. Januar 201114 j von reyman040
28. Januar 201114 j Und genau das macht die Funktion, wie ich es eben demonstriert habe. Ich weiß nicht, wo es bei Dir hängt. Willst Du es schlicht anders schreiben? Ich meine, das geht, aber es macht überhaupt keinen Unterschied der Funktionalität gegenüber: give s = case s of [] -> "Hallo" (x:[]) -> "Wie" (x:xs) -> x:xs Bearbeitet 28. Januar 201114 j von Ezra
28. Januar 201114 j Ja, aber die Funktion funktioniert nur bei eingaben wie z.b ("h") oder ("hh") Jedoch soll die Funktion so funktionieren: Bei einer eingabe wie z.b: 1. [] soll "Hallo" ausgegeben werden 2. ("hallo") soll "wie" ausgegeben werden 3. ("hallo","wie","geht") soll der Inhalt der Liste wieder gegeben werden mache str = (give(words str)) give [] = "wie" give (x:[]) = "hallo so funktionier die Funktion halbwegs, und der Kopf kann auch ein ganzes Wort sein, wenn ich jedoch noch (x:xs)= x:xs einbaue gibt es einen ERROR, also bei einer eingabe von mehreren Wörtern
28. Januar 201114 j Dass das eine Liste aus Strings sein soll (und nicht etwa eine Liste aus Chars) , musst Du schon dazu sagen. Kann doch keiner hellsehen. give :: [[Char]] -> [Char] give s = case s of [] -> "Hallo" x:[] -> "Wie" x:xs -> foldr (++) "" (x:xs) Die Eingabe darfst Du allerdings nicht plötzlich als Tupel machen. Das hier geht beispielsweise mit: give ["Hallo", "Test", "OK"]
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.