在Haskell的If-Else中会发生什么?

时间:2014-09-22 10:03:58

标签: function haskell if-statement

我在haskell中有这个if-else子句。

let f x y = if y/=0 then f (x+1) (y-1) else x in f 3 5

结果是8.我无法理解为什么。

有人可以逐步向我解释吗? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:16)

好的,让我们首先使用缩进来使函数定义更清晰

let f x y =
     if y/=0
         then f (x+1) (y-1)
         else x
in f 3 5

首先使用参数35调用f。 y为5(即非0),执行then分支,使用参数44调用f。由于y仍然不等于0,我们再次进入then分支并使用参数53调用f。这一直持续到我们最终使用x = 8y = 0来调用f。然后我们进入条件的else分支,它只返回x,即8。

以下是表达式f 3 5可以减少的一种方式:

f 3 5 -- y /= 0, so we go into the then branch
=> f (3 + 1) (5 - 1)
=> f 4 4 -- then branch again
=> f (4 + 1) (4 - 1)
=> f 5 3
=> f (5 + 1) (3 - 1)
=> f 6 2
=> f (6 + 1) (2 - 1)
=> f 7 1
=> f (7 + 1) (1 - 1)
=> f 8 0 -- this time we go into the else branch
=> 8