Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Haskell Strings
Druckversion
Druckversion
Autor
Universität/Hochschule J Haskell Strings
Inf0rmatiker
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 14.11.2018
Mitteilungen: 60
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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:

fed-Code einblenden


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?



Wahlurne Für Inf0rmatiker bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
ligning
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 07.12.2014
Mitteilungen: 3202
Herkunft: Berlin
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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.



-----------------
⊗ ⊗ ⊗



Wahlurne Für ligning bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Inf0rmatiker
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 14.11.2018
Mitteilungen: 60
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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.



Wahlurne Für Inf0rmatiker bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
ligning
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 07.12.2014
Mitteilungen: 3202
Herkunft: Berlin
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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.



Wahlurne Für ligning bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Inf0rmatiker
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 14.11.2018
Mitteilungen: 60
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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?



Wahlurne Für Inf0rmatiker bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
ligning
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 07.12.2014
Mitteilungen: 3202
Herkunft: Berlin
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2020-11-09


Ich meine das Zeichen, was der Hilfsfunktion als erstes Argument übergeben wird.



Wahlurne Für ligning bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
ligning
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 07.12.2014
Mitteilungen: 3202
Herkunft: Berlin
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, eingetragen 2020-11-09


Nochmal etwas ausführlicher.

1. Schreibe eine Funktion mit folgender Signatur:
Haskell
prefixConsistingOf :: Char -> String -> String

die folgendes Verhalten hat:
Haskell
prefixConsistingOf 'a' "aaabbbcc" == "aaa"
prefixConsistingOf 'a' "abca" == "a"
prefixConsistingOf 'a' "ccbbaa" == ""
prefixConsistingOf 'x' "aaabbbcc" == ""

Ü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.



Wahlurne Für ligning bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Inf0rmatiker
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 14.11.2018
Mitteilungen: 60
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, vom Themenstarter, eingetragen 2020-11-10


2020-11-09 16:42 - ligning in Beitrag No. 6 schreibt:
Nochmal etwas ausführlicher.

1. Schreibe eine Funktion mit folgender Signatur:
Haskell
prefixConsistingOf :: Char -> String -> String

die folgendes Verhalten hat:
Haskell
prefixConsistingOf 'a' "aaabbbcc" == "aaa"
prefixConsistingOf 'a' "abca" == "a"
prefixConsistingOf 'a' "ccbbaa" == ""
prefixConsistingOf 'x' "aaabbbcc" == ""

Ü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 :)



Wahlurne Für Inf0rmatiker bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
thureduehrsen
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 13.11.2007
Mitteilungen: 895
Herkunft: Kiel, Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2020-11-10


2020-11-10 09:27 - Inf0rmatiker in Beitrag No. 7 schreibt:
Hab sie ohne Hilfsfunktion hinbekommen, aber danke für die Hilfe :)

Nämlich wie?

mfg
thureduehrsen


-----------------
sammeltlemmas.blogspot.de/

https://www.informatik.uni-kiel.de/~tdu/



Wahlurne Für thureduehrsen bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Inf0rmatiker
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 14.11.2018
Mitteilungen: 60
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, vom Themenstarter, eingetragen 2020-11-12


2020-11-10 10:22 - thureduehrsen in Beitrag No. 8 schreibt:
2020-11-10 09:27 - Inf0rmatiker in Beitrag No. 7 schreibt:
Hab sie ohne Hilfsfunktion hinbekommen, aber danke für die Hilfe :)

Nämlich wie?

mfg
thureduehrsen


samePrefix :: String -> String
samePrefix input =
    if null input then ""
    else if null (tail input) then input
    else if (head input) == head (tail input)
        then [head input] ++ samePrefix (tail input)
        else [head input]



Wahlurne Für Inf0rmatiker bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Inf0rmatiker hat die Antworten auf ihre/seine Frage gesehen.
Das Thema wurde von einem Senior oder Moderator abgehakt.
Neues Thema [Neues Thema]  Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]