Zum Inhalt springen

Haskell Probleme


reyman040

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Ezra
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von reyman040
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Ezra
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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"]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...