Ошибка анализа синтаксиса haskell в шаблоне для n + k pattern
Я начал прокладывать себе путь через Erik Meijer 13-секционные лекции (и Graham Hutton slides), чтобы узнать Haskell.
На слайдах для главы 4, на стр. 13, он вводит синтаксис соответствия шаблону для шаблонов n + k. В частности, он говорит:
Как и в математике, функции на целых числах можно определить, используя n + k шаблоны, где n - целочисленная переменная, а k > 0 - целое число константа.
pred :: Int -> Int
pred (n+1) = n
Когда я попробовал это самостоятельно, в REPL я получил сообщение об ошибке:
*Main> let mypred (n+1) = n
<interactive>:65:13: Parse error in pattern: n + 1
Аналогично, если я попробую его в файле *.hs
mypred :: Int -> Int
mypred (n+1) = n
Компилятор дает аналогичную жалобу:
/Users/pohl/Code/praxis-haskell/helloworld.hs:14:9:
Parse error in pattern: n + 1
Я не понимаю, как использовать n + k шаблоны?
Ответы
Ответ 1
Вы должны включить его с помощью -XNPlusKPatterns
.
ghci -XNPlusKPatterns
Prelude> let mypred (n+1) = n
Prelude> mypred 2
1
Аналогично в файле hs
.
{-# LANGUAGE NPlusKPatterns #-}
mypred :: Int -> Int
mypred (n+1) = n
После загрузки в ghci
*Main> mypred 2
1
Ответ 2
Я не понимаю, как использовать n + k шаблоны?
На самом деле, сегодня n+k
шаблоны считаются плохой практикой. Основная причина этого в том, что синтаксис на самом деле не похож на что-либо еще в Haskell, часть +
на самом деле не использует +
, который находится в области видимости, в отличие от того, как работает нотация do
. Кроме того, расширение viewpatterns является своего рода обобщением, которое полезно во многих других параметрах.
Здесь больше информации о том, почему он был удален.