【发布时间】:2021-12-29 10:45:57
【问题描述】:
这是我的第一个 Stack Overflow 问题,如果我忘记了任何重要信息,请告诉我,我会补充!
所以我是 Haskell 的新手,只是学习类型和类。现在我声明了 1 个类型和 2 个函数:
data Nat = Zero | Succ Nat
add :: Nat -> Nat -> Nat
add Zero n = n
add (Succ m) n = Succ (add m n)
mult :: Nat -> Nat -> Nat
mult Zero _ = Zero
mult (Succ m) n = add n (mult m n);
当调用第一个函数时,我可以完全评估它并了解 Haskell 是如何处理它的。像这样:
> 2 + 1 = 3
>
> add (Succ (Succ Zero)) (Succ Zero)
>
> Succ (add (Succ zero)) (Succ Zero))
>
> Succ (Succ (add Zero (Succ Zero))
>
> Succ (Succ (Succ Zero))
但我无法理解mult 函数的情况。对我来说,这看起来将是一个无限循环的添加。
谁能解释我如何评估mult 函数?
【问题讨论】: