Inf0rmatiker
Aktiv Dabei seit: 14.11.2018 Mitteilungen: 60
Themenstart: 2020-11-09
Hallo,
möchte ein Haskelprogramm schreiben, welches bei einem String nur den Teil ausgibt, solange der Buchstabe derselbe ist.
Z.B.: "aaabc" == "aaa" oder "abs = "a" oder "" == ""
Meine Idee:
samePrefix :: String -> String samePrefix input = if (head input) == head (tail input) then samePrefix (input) else [head input]
Ich möchte den ersten Buchstaben so lange mit den weiteren Buchstaben vergleichen, bis die nicht mehr gleich sind. Und den Teil, der beim Vergleich gepasst hat, ausgeben.
Ich darf nur die Schlüselwörter: tail, head, :, ++, [] verwenden.
Hat jemand einen Tipp, wie ich das besser angehen könnte?
ligning
Senior Dabei seit: 07.12.2014 Mitteilungen: 3202
Herkunft: Berlin
Beitrag No.1, eingetragen 2020-11-09
Ich würde eine Hilfsfunktion mit der Signatur Char -> String -> String schreiben, die dir das Präfix des Strings zurückgibt, das nur aus dem übergebenen Zeichen besteht. Und außerdem sicherstellen, dass das ganze auch mit leeren Strings funktioniert.
Inf0rmatiker
Aktiv Dabei seit: 14.11.2018 Mitteilungen: 60
Beitrag No.2, vom Themenstarter, eingetragen 2020-11-09
2020-11-09 09:49 - ligning in Beitrag No. 1 schreibt:
Ich würde eine Hilfsfunktion mit der Signatur Char -> String -> String schreiben, die dir das Präfix des Strings zurückgibt, das nur aus dem übergebenen Zeichen besteht. Und außerdem sicherstellen, dass das ganze auch mit leeren Strings funktioniert.
Das mit dem Zurückgeben in Haskell versteh ich noch nicht ganz...
Wenn der String leer ist, was kann man dann zurückgeben? Einen leeren String zurückgeben geht ja nicht.
Das wäre mein Ansatz:
aux :: Char -> String -> String
aux (ca:xs) =
if null (ca:xs) then "error"
else [head ca] : (tail xs)
Wenn der String leer ist, dann error, ansonsten soll der erste Buchstabe in ca gespeichert werden und der Rest in xs.
ligning
Senior Dabei seit: 07.12.2014 Mitteilungen: 3202
Herkunft: Berlin
Beitrag No.3, eingetragen 2020-11-09
2020-11-09 11:04 - Inf0rmatiker in Beitrag No. 2 schreibt:
Wenn der String leer ist, was kann man dann zurückgeben? Einen leeren String zurückgeben geht ja nicht.
Wieso nicht?
Das wäre mein Ansatz:
aux :: Char -> String -> String
aux (ca:xs) =
if null (ca:xs) then "error"
else [head ca] : (tail xs)
Das ergibt relativ wenig Sinn, ich weiß nicht, was ich da kommentieren soll.
Inf0rmatiker
Aktiv Dabei seit: 14.11.2018 Mitteilungen: 60
Beitrag No.4, vom Themenstarter, eingetragen 2020-11-09
2020-11-09 11:18 - ligning in Beitrag No. 3 schreibt:
2020-11-09 11:04 - Inf0rmatiker in Beitrag No. 2 schreibt:
Wenn der String leer ist, was kann man dann zurückgeben? Einen leeren String zurückgeben geht ja nicht.
Wieso nicht?
Das wäre mein Ansatz:
aux :: Char -> String -> String
aux (ca:xs) =
if null (ca:xs) then "error"
else [head ca] : (tail xs)
Das ergibt relativ wenig Sinn, ich weiß nicht, was ich da kommentieren soll.
Hmm...was genau meinst du mit "übergebenen Zeichen"? Dass das erste Zeichen des Strings als Char zurückgegeben wird?
Überlege dir selbst, was sinnvollerweise passieren soll, wenn der String leer ist.
2. Benutze diese Funktion, um die geforderte Funktion zu implementieren. Überlege auch hier, was passieren soll, wenn der String leer ist.
3. Wenn alles funktioniert, versuche prefixConsistingOf mithilfe von where innerhalb von samePrefix zu definieren. Du kannst sie dann auch aux oder sonstwie nennen.
Überlege dir selbst, was sinnvollerweise passieren soll, wenn der String leer ist.
2. Benutze diese Funktion, um die geforderte Funktion zu implementieren. Überlege auch hier, was passieren soll, wenn der String leer ist.
3. Wenn alles funktioniert, versuche prefixConsistingOf mithilfe von where innerhalb von samePrefix zu definieren. Du kannst sie dann auch aux oder sonstwie nennen.
Hab sie ohne Hilfsfunktion hinbekommen, aber danke für die Hilfe :)