【发布时间】:2023-03-20 04:45:02
【问题描述】:
我目前正在尝试在 Haskell 中实现原始递归阶乘。 我正在使用函数 recNat 作为递归。那就是:
recNat :: a -> (Nat -> a -> a) -> Nat -> a
recNat a _ Zero = a
recNat a h (Succ n) = h n (recNat a h n)
这是我们的尝试,但无法完全找出问题所在
factR :: Nat -> Nat
factR Zero = Succ Zero
factR (Succ m) = recNat (Succ m) (\ _ y -> y) (factR m)
我也尝试实现指数函数,但似乎更令人困惑。
【问题讨论】:
-
您想要乘法(如您的问题中所述)还是阶乘(如您的标题中所述)?
-
阶乘!我的错误
-
您的 lambda 忽略第一个参数,因此
recNat调用将始终返回(Succ m)。如果你想要一个原始的递归函数,你需要一种在递归堆栈上堆积Nat增量的方法。
标签: function haskell recursion primitive