3

Dies ist der Code, den ich habe:Haskell: Wo ist das "Parsen Fehler im Muster"

connected :: [(Integer,Integer)] -> Bool 
connected [] = True 
connected [(_,_)] = True 
connected (a,b):(c,d):xs 
       | a > c  = False 
       |otherwise = connected (c,d):xs 

Wenn ich laden Sie es GHCi es

error: parse error in pattern: connected

zeigt Wo haben Ich habe einen Fehler gemacht?

+0

Kleine Stilnote: 'foo | x = Falsch | sonst = etwas ist (IMO) häufiger als 'foo = nicht x && etwas 'geschrieben. In Ihrem Fall können Sie 'connected (...) = a <= c && connected (...)' verwenden. – chi

Antwort

7

Sie müssen Klammern um Ihre Nachteile Ausdrücke an zwei Stellen hinzufügen:

connected :: [(Integer,Integer)] -> Bool 
connected [] = True 
connected [(_,_)] = True 
connected ((a,b):(c,d):xs)       -- (2) 
       | a > c  = False 
       | otherwise = connected ((c,d):xs) -- (1) 
  1. Funktion Anwendung bindet stärker als Infixoperatoren, so connected (c,d) : xs als (connected (c,d)) : xs analysiert wird.

  2. Ähnliches passiert im Musterausdruck. Obwohl die nicht hilfreiche Fehlermeldung, die Sie dort erhalten, eher unglücklich ist.

Opinionated side note: Ich empfehle das Schreiben immer Infixoperatoren mit Leerzeichen um sie herum (zum Beispiel a : b statt a:b), weil ich das Leerzeichen denken Weglassen bedeutet subtil, dass der Bediener mehr bindet fest, als es wirklich der Fall ist.