我在haskell中有这个if-else子句。
let f x y = if y/=0 then f (x+1) (y-1) else x in f 3 5
结果是 8。我不明白为什么。
有人可以逐步向我解释吗?
感谢帮助!
最佳答案
好的,让我们首先通过使用缩进使函数定义更清晰一点
let f x y =
if y/=0
then f (x+1) (y-1)
else x
in f 3 5
所以 f 是用参数调用的
3
和 5
首先。 y
是 5(即不是 0),then
执行分支,它使用参数 4
调用 f和 4
.自 y
仍然不等于0,我们进入then
再次分支并使用参数调用 f 5
和 3
.一直这样,直到我们最终用 x = 8
调用 f和 y = 0
.然后我们进入条件的 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
关于function - Haskell 中的 If-Else 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25971432/