2013-01-10 7 views
17

Ich habe begonnen, mich durch Erik Meijer's 13-part lectures (und Graham Huttons slides) zu arbeiten, um Haskell zu lernen.Haskell Parse-Fehler im Muster für n + k Muster

Auf den Folien für Kapitel 4, auf Seite 13, wird die Mustervergleichssyntax für n + k Muster eingeführt. Insbesondere heißt es:

wie in der Mathematik, Funktionen auf ganze Zahlen Mustern unter Verwendung von n + k definiert werden können, wobei n eine ganzzahlige Variable und k> 0 ist, eine ganze Zahl konstant.

pred :: Int -> Int 
pred (n+1) = n 

Als ich versuchte, die alleine in dem REPL ich eine Fehlermeldung erhalten:

*Main> let mypred (n+1) = n 

<interactive>:65:13: Parse error in pattern: n + 1 

Und falls ich es in einer *.hs Datei versuchen

mypred :: Int -> Int 
mypred (n+1) = n 

Die Compiler gibt eine ähnliche Beschwerde:

/Users/pohl/Code/praxis-haskell/helloworld.hs:14:9: 
    Parse error in pattern: n + 1 

Versteh ich nicht, wie n + k Muster verwendet werden sollen?

+0

der Link für Folien ist kaputt, können Sie einen neuen Link teilen? – weima

+0

Hast du einen 404 bekommen? Es funktioniert immer noch für mich. http://www.cs.nott.ac.uk/~gmh/book.html – pohl

Antwort

34

Sie müssen es durch -XNPlusKPatterns aktivieren.

ghci -XNPlusKPatterns 
Prelude> let mypred (n+1) = n 
Prelude> mypred 2 
1 

Ähnlich in einer hs Datei.

{-# LANGUAGE NPlusKPatterns #-} 

mypred :: Int -> Int 
mypred (n+1) = n 

Nachdem in GHCI Laden

*Main> mypred 2 
1 
+1

Nun, das hat den Trick gemacht. (Danke!) Ist das ein experimentelles Feature? Weiß jemand, warum dies auf diese Weise aktiviert werden muss? – pohl

+7

@pohl Ich denke, es wurde entfernt und jetzt nur als Erweiterung verfügbar. http://hackage.haskell.org/trac/haskell-prime/wiki/RemoveNPlusK – Satvik

+4

Cool. Das ist ein kleiner Einblick in die Art von Denken, die eine so elegante Sprache hervorgebracht hat. So erfrischend, dass etwas entfernt wird! – pohl

9

Bin ich nicht verstehen, wie n + k-Muster verwendet werden sollen?

Eigentlich werden heute n+k Muster als schlechte Praxis angesehen. Der Hauptgrund dafür ist, dass die Syntax nicht wirklich wie alles andere in Haskell aussieht, der + Teil verwendet nicht wirklich die +, die im Umfang ist, anders als sagen, wie die do Notation funktioniert. Auch die viewpatterns Erweiterung ist eine Art Verallgemeinerung, die in viele weitere Einstellungen nützlich ist.

Es gibt weitere Informationen here auf, warum es entfernt wurde.