2013-01-10 19 views
17

Rozpocząłem pracę poprzez Erik Meijer's 13-part lectures (i Graham Hutton's slides), aby poznać Haskella.Błąd analizy parsonu w wzorzec dla wzoru n + k

Na slajdach do rozdziału 4, na stronie 13, wprowadza składnię dopasowania do wzorca dla wzorów n + k. W szczególności, to mówi:

jak w matematyce, działa na całkowite można określić stosując n + k wzory, przy czym n jest zmienną całkowitą, a k> 0 jest liczbą całkowitą stała.

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

Kiedy próbowałem tego na własną rękę w REPL otrzymuję komunikat o błędzie:

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

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

Podobnie, gdy próbuję go w pliku *.hs

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

kompilator daje podobną skargę:

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

Czy nie rozumiem, w jaki sposób należy używać wzorów n + k?

+0

link do slajdów jest uszkodzony, czy możesz udostępnić nowy link? – weima

+0

Czy otrzymałeś 404? Nadal działa dla mnie. http://www.cs.nott.ac.uk/~gmh/book.html – pohl

Odpowiedz

34

Musisz go włączyć przez -XNPlusKPatterns.

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

Podobnie w pliku hs.

{-# LANGUAGE NPlusKPatterns #-} 

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

Po załadunku ghci

*Main> mypred 2 
1 
+1

Cóż, to wystarczyło. (Dziękuję!) Czy to jest funkcja eksperymentalna? Czy ktokolwiek wie, dlaczego należy to włączyć w ten sposób? – pohl

+7

@pohl Myślę, że został usunięty i teraz dostępny tylko jako rozszerzenie. http://hackage.haskell.org/trac/haskell-prime/wiki/RemoveNPlusK – Satvik

+4

Cool. To małe spojrzenie na myślenie, które doprowadziło do stworzenia tak eleganckiego języka. Tak orzeźwiający, aby zobaczyć coś usuniętego! – pohl

9

jestem nie rozumiejąc jak n + k wzory mają być wykorzystane?

Właściwie dzisiejsze modele n+k są uważane za złe praktyki. Głównym powodem tego jest fakt, że składnia nie wygląda tak jak cokolwiek innego w Haskell, część + nie używa tak naprawdę zakresu +, w przeciwieństwie do tego, jak działa notacja do. Ponadto rozszerzenie viewpatterns jest rodzajem uogólnienia, które jest przydatne w wielu dodatkowych ustawieniach.

Istnieje więcej informacji na temat here, dlaczego został usunięty.

Powiązane problemy