Vergleich von zwei strings in Haskell

Stieß ich auf ein ziemlich dummes Praxis-problem, die aufgeführt wurde als einfach, so dass ich dachte, ich könnte es tun. Die Prämisse ist, dass muss ein Arzt hört einen Patienten sagen, dass aah in Auftrag zu geben, eine Diagnose, aber die aah aus der patient muss mit der aah Wunsch des Arztes. Wenn der Arzt fragt nach aaaaah, und der patient sagt, ah, dann wird keine Diagnose gegeben werden kann. Das Haskell-Programm soll zu Lesen, in der ein Arzt und ein patient aah in Ordnung und Rückgabe ein Boolescher Wert, wenn eine Diagnose gegeben werden kann. Zuerst dachte ich, Sie müsse identisch sein so das war mein code:

seeDoctor :: String -> String -> Bool
seeDoctor a b = if a == b then True
                else False

Jedoch, ich merkte, ich war nicht nach allen Regeln der problem-und es war nicht so einfach. Der patient kann sagen, aah länger als der Arzt, und True zurückgeben, so "aah" "aaaah" gibt True zurück, ebenso wie "" "aaah" und "h", "aah", sondern "aaah" "ah" "False" zurückgibt. Aber selbst wenn der Doktor nicht enthalten ein 'h' in Ihrem aah, der patient muss also "ein" "ein" False " zurückgibt, aber mein code würde True zurückgeben. Also, wenn der patient so etwas sagt, muss es sein, die notwendige Anzahl von 'a' gefolgt von einem einzelnen 'h' und keine anderen Zeichen. Sehen Sie, ich habe einmal den Versuch gestartet, den vorgeschlagenen test Fällen, merkte ich, wie wenig ich es verstanden habe. Kann ich halten eine Anzahl von 'a' in jedem string? Wie kann ich prüfen, ob zusätzliche Zeichen? Sorry das dauerte eine Weile zu Lesen. Vielen Dank, dass Ihr es so weit.

Hier ist die genaue Frage:

"Wenn wir gehen, um zu sehen, ein Arzt, der Arzt fragt immer uns, zu sagen "aaah".
Manchmal, der Arzt muss uns sagen Sie "Aaaaah", aber wir können nur
zu sagen "aaah". In diesem Fall der Arzt nicht in der Lage ist zu diagnostizieren, unsere
Krankheit, da die 'a' s in unserem "aaah" sind Sie weniger als seine oder Ihre
Anforderungen. Schreiben Sie nun eine Haskell-Funktion, die aufgerufen wird seeDoctor zu beurteilen
wenn der Arzt diagnostizieren kann, uns mit unseren "aah". Die Eingabe der
die Funktion besteht aus zwei strings. Der erste string ist das "aaaah" der
Arzt braucht, und die zweite Zeichenfolge ist der "aah" wir sind in der Lage zu sagen.
Die Ausgabe "True", wenn unsere "aah" erfüllt die Anforderungen des Arztes, und
die Ausgabe "False" sonst. Sollte der test pass mit einem "True" nur, wenn
Kleinbuchstaben 'a' und 'h' s verwendet werden, und jeder string enthält eine bestimmte
Anzahl der 'a' gefolgt von einem einzelnen 'h'."

  • Kannst du die Anfrage bei verbatim? Die Art und Weise, die Sie es beschreiben, ist nicht ganz klar.
  • Also wenn ich es richtig verstehe, sind beide strings haben das format a*h* (das ist eine regex, die * bedeutet, dass *die Anzahl der vorherigen char), und die Anzahl der a's und hs sollte größer als oder gleich den angeforderten aahh?
  • Was sollte die Ausgabe von seeDoctor "foo" "aaaaaaaah"?
  • Ich glaube, dass es False sein sollte, in diesem Fall, @MarkSeemann.
  • Warum gehst du nicht einfach filter 'a's und compare Ihre Länge..?
  • Auch bemerken, dass Ihre erste Versuch wird eine gemeinsame antipattern. Jedes mal, wenn Sie sehen if p then True else False Sie können schreiben Sie einfach p. In diesem Fall könnten Sie selbst geschrieben haben seeDoctor = (==) und nicht explizit über die Argumente.

InformationsquelleAutor Matt Robbins | 2017-09-20
Schreibe einen Kommentar