【发布时间】:2016-05-06 04:12:10
【问题描述】:
以下内容来自 Hutton 的《Haskell 编程》(第 102 页)。
data Nat = Zero | Succ Nat
natToInt :: Nat -> Int
natToInt Zero = 0
natToInt (Succ n) = 1 + natToInt n
如果我在 ghci 中输入 natToInt Zero,我得到 0。如果我输入 natToInt (Succ Zero),我得到 1。
但是natToInt (Succ (Succ Zero)) 返回 2。我在逻辑上理解它,但我不明白它是如何在这个语句中递归工作的。
内部(Succ Zero)不返回1吗?这意味着,在我看来,outermost 将 1 作为参数这是不正确的,因为 1 不是 Nat 类型。
然后就是
natToInt (Succ ( 1 + 0)).
谁能帮我理解一下?
【问题讨论】:
-
将
Succs 视为从外到内展开。 -
不,
natToInt (Succ Zero)返回 1。Succ Zero本身返回一个Nat类型的值。
标签: haskell functional-programming