haskell 模式匹配数(解构)

Evg*_*Evg 6 haskell pattern-matching

Haskell 中的模式匹配是否可以用于以这种方式解构数字:

f (n + 1) = n
Run Code Online (Sandbox Code Playgroud)

我期望前体为:f 6 = 5,f 5 = 4 等。

我在这里找到了这种模式匹配的用法:https : //wiki.haskell.org/Continuation

 facCPS :: a -> (a -> r) -> r
 facCPS 0 k = k 1
 facCPS n'@(n + 1) k = facCPS n $ \ret -> k (n' * ret)
 facCPS 4 (+ 2) :: Integral a => a
Run Code Online (Sandbox Code Playgroud)

但在我的 ghci 中它不起作用:

Prelude> f (n + 1) = n :4:12: 错误:模式解析错误:n + 1

也许需要添加一些选项?我可以以某种方式使用模式匹配吗?

Mar*_*bot 4

使用您引用的 wiki 中的示例:

{-# LANGUAGE NPlusKPatterns #-}
fac :: Integral a => a -> a
fac 0 = 1
fac n'@(n + 1) = n' * fac n
Run Code Online (Sandbox Code Playgroud)

它于 2010 年从该语言中删除,但 Haskell 仍然是一种非常可配置的语言。:)