Gepostet: |
Pattern Matching | ||||||||||
Hi, ich hab eine Aufgabe um einfaches Pattern Matching im Haskell zu implementieren. * und ? sind Sonderzeichen, die einen Buchstaben bzw. eine Reihe der Zeichen ersetzen koennen (auch keine Zeichen). Das mit dem Fragezeichen hab ich so geloest, sodass ich in dem entsprechendem Text, der ich mit dem Muster vergleiche, entsprechenden Buchstaben mit den ? ersetze. Das funktioniert schon, aber * ist ein wenig schwieriger zu implementieren. Ein solcher Fall z.B. Muster= "ab*d*xy" , Text= "abcmusadkkyxy"; Kann mir jmd ein Tipp geben? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Du musst erstmal sagen, was du genau machen sollst. Sollst du nur zurückgeben, ob das Suchmuster (ab*d*xy) im Suchtext (abcmusadkkyxy) vorhanden ist? Also einen true/false-Wert zurückgeben? Oder sollst du das Suchmuster finden und das komplette Suchmuster durch einen anderen String ersetzen? Und als zweites, soll das Suchmuster nur enthalten sein -sprich Muster "ab", Text = "cabc" wird gefunden, oder muss das Suchmuster auf den ganzen Text anspringen - also Muster = "*ab*", Text = "cabc"? Und dann noch was zum Verständnis: ? heißt genau ein Zeichen * heißt beliebig viele Zeichen, auch keine Zeichen Wenn ich da was falsch verstanden habe, dann musst du das mal noch korrigieren... |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hi, man sollte den Text ausgeben, wenn der Muster mit im Text vorkommt. D.h. im Falle Muster= "ab*d*xy" , Text= "abcmusadkkyxy" sollte der Text ausgegeben werden. Jacke wrote: "Und als zweites, soll das Suchmuster nur enthalten sein -sprich Muster "ab", Text = "cabc" wird gefunden, oder muss das Suchmuster auf den ganzen Text anspringen - also Muster = "*ab*", Text = "cabc"?" Das ist eine gute Frage. Ich hab schon einen Algorithmus, der ohne ? und * super funktioniert. Im Falle Muster="ab" und "cabc" liefert er den Text aus. Das ist leider nicht so eindeutig in der Angabe. Ich meine, das ist mir zur Zeit nicht so wichtig; das kann ich spaeter anedern; da problemm ist, dass ich irgendwie nicht eine Loesung mit den * (obiges Bsp) finden kann. Hab schon eine Idee, aber ist ziemlich kompliziert. Hast irgendwelche Vorschlaege? Danke fuer Meldung :) lG |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
so hier erstmal eine vorvorläufige version...schmeißt aber nen fehler beim ausführen...ich denke ich werd es dann morgen fertig proggen krieg ich aber sicher noch hin...vllt hilft dir aber die idee schon weiter gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hier mal eine etwas eine richtigere Lösung, aber immernoch nicht ganz fertig ;-)suche ([m],[],acc) = [] |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
soooo jetzt aber : da ist sie die lösung :
und so ruft mans auf :-)
naja hat noch ein paar macken ^^ bei ** streikt er auch aber ich denke damit kommst du schon weiter...ich für meinen fall bin jetzt tot müde und bei nen sternchen am ende gehts auch nicht ...wenn es nicht geht schmeißt er auch ab und an ne fehlermeldung ^^ |
|||||||||||
Zum Seitenanfang | |||||||||||