2017-04-14 2 views
0

Ich bin ziemlich neu in Haskell und heute habe ich versucht, einen Taschenrechner mit Haskell (wie die meisten Leute machen beim Erlernen einer neuen Sprache, um die Aussage zu halten) und ich hatte Problem, wenn Werte mit Zeichenfolgen verwendet werden. Ich möchte überprüfen, ob die Zeichenfolge, die der Benutzer schrieb, "plus" ist (ohne ""), aber wenn ich nicht die Anführungszeichen (so würde es wie if op == plus aussehen) es nicht als eine Zeichenfolge erkennt und einen Fehler ausgibt aber wenn ich andererseits die Anführungszeichen verwende (so würde es so aussehen if op == "plus"), dann sucht es nach der Zeichenfolge "plus" mit den Anführungszeichen, wie kann ich eine Zeichenfolge mit einem Wert ohne Anführungszeichen vergleichen?Wie man die Zeichenkette mit dem Wert ohne Anführungszeichen vergleicht

Fall 1:

calculate x op y = do 
      if op == "plus" 
         then x+y 
         else x 

Ergebnis: Das Programm sucht nach „plus“ beim Aufruf der Funktion und somit, wenn der Eingang beim Aufruf der Funktion zum Beispiel „1 plus 3“ wird es einen Fehler geben von ‚: 67: 13: Fehler: Variable in ihrem Umfang nicht: plus :: [Char]

Fall 2:

calculate x op y = do 
      if op == plus 
         then x+y 
         else x 

Ergebnis: bei dem Versuch, das Programm, das ich den Fehler„test.hs erhalten zu laden : 2: 33: Fehler: Variable nicht in scope: plus Fehlgeschlagen, Module geladen: keine. ", so kann ich die Funktion offensichtlich nicht aufrufen.

+2

Bitte teilen Sie die [MCVE]. – bereal

+0

Zusätzlich zu @ bereals Notiz, Welcome to Stack Overflow! Ich sehe, du hast die [Tour] bereits gemacht, also werde ich dich einfach mit der [Hilfe] und auch mit dem Artikel auf [ask] verlinken. – Delioth

+0

@bereal Hinzugefügt in den Beitrag Delioth Vielen Dank für Ihre Hilfe und freundliche Haltung, werde ich sicher sein, es zu lesen – OreOS

Antwort

4

Die Anführungszeichen sind nur ein Teil der Syntax von String-Literalen, nicht ihr Inhalt. Das heißt, wenn Sie op == "plus" schreiben, wird dies wahr sein, wenn (und nur wenn) plus die Zeichen 'p', 'l', 'u' und 's' (in dieser Reihenfolge, offensichtlich) enthält - es erfordert nicht (oder erlauben Sie) op, irgendwelche Anführungszeichen zu enthalten.

Also, wenn op == "plus" nicht True für Sie produziert, auch wenn Sie denken, es sollte, op enthält nicht, was Sie denken, dass es tut.

+0

Ich glaube, es gab ein Missverständnis zwischen uns, vor allem schlage ich vor, dass du dir meine neu hinzugefügten Beispiele anschaust und vielleicht klärt es auf. Zweitens möchte ich versuchen, mich selbst zu erklären, was ich meine ist, dass mein Ziel ist, zu überprüfen, ob die Zeichenfolge 'op' gleich "plus" ist (ohne Anführungszeichen, also wäre es "plus"), aber bei Verwendung 'op ==" plus "' es nimmt die Zeichenfolge als '" plus "' anstelle von 'plus' – OreOS

+2

@OreOS 'mein Ziel ist es, zu überprüfen, ob die Zeichenfolge' op 'gleich" plus "ist (ohne Anführungszeichen so wäre plus) Das ist genau das, was "op ==" plus "' tut. 'Wenn op == "plus" verwendet wird, wird die Zeichenfolge als "plus" anstelle von "plus" genommen. Das ist nicht wahr. – sepp2k

+1

@OreOS: ein Beweis für das Konzept, was oben gesagt: https://repl.it/HJwb – bereal

Verwandte Themen