n + k模式的模式中的haskell解析错误

poh*_*ohl 17 haskell pattern-matching ghci

我已经开始通过Erik Meijer的13个部分讲座(以及Graham Hutton的幻灯片)来学习Haskell.

在第4章的幻灯片上,第13页介绍了n + k模式的模式匹配语法.特别是,它说:

与数学一样,整数函数可以使用n + k模式定义,其中n是整数变量,k> 0是整数常量.

pred :: Int -> Int
pred (n+1) = n
Run Code Online (Sandbox Code Playgroud)

当我在REPL中自己尝试这个时,我收到一条错误消息:

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

<interactive>:65:13: Parse error in pattern: n + 1
Run Code Online (Sandbox Code Playgroud)

同样,如果我在*.hs文件中尝试它

mypred :: Int -> Int
mypred (n+1) = n
Run Code Online (Sandbox Code Playgroud)

编译器给出了类似的抱怨:

/Users/pohl/Code/praxis-haskell/helloworld.hs:14:9:
    Parse error in pattern: n + 1
Run Code Online (Sandbox Code Playgroud)

我不明白如何使用n + k模式?

Sat*_*vik 34

你必须启用它-XNPlusKPatterns.

ghci -XNPlusKPatterns
Prelude> let mypred (n+1) = n
Prelude> mypred 2
1
Run Code Online (Sandbox Code Playgroud)

同样在hs文件中.

{-# LANGUAGE NPlusKPatterns #-}

mypred :: Int -> Int
mypred (n+1) = n
Run Code Online (Sandbox Code Playgroud)

加载到ghci后

*Main> mypred 2
1
Run Code Online (Sandbox Code Playgroud)

  • @pohl我认为它已被删除,现在仅作为扩展名提供.http://hackage.haskell.org/trac/haskell-prime/wiki/RemoveNPlusK (7认同)
  • 凉.这是对那种带来如此优雅语言的思维的一瞥.看到删除的东西真是太爽了! (4认同)
  • @pohl:是的!"在许多情况下,它不会填充氦气球,而是切断沙袋,让你高高在上." (找到http://wadler.blogspot.com/2012_05_01_archive.html) (3认同)

Tar*_*sch 9

我不明白如何使用n + k模式?

实际上,现在的n+k模式被认为是不好的做法.这样做的主要原因是语法在Haskell中看起来并不像其他任何东西,+部分并没有真正使用+范围内的那个,不像说do符号是如何工作的.此外,viewpatterns扩展是一种泛化,在许多其他设置中都很有用.

还有更多的信息在这里为什么它被删除.