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

标签 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。我不明白为什么。

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

最佳答案

好的,让我们首先通过使用缩进使函数定义更清晰一点

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

所以 f 是用参数调用的 35首先。 y是 5(即不是 0),then执行分支,它使用参数 4 调用 f和 4 .自 y仍然不等于0,我们进入then再次分支并使用参数调用 f 53 .一直这样,直到我们最终用 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/

相关文章:

Ruby 方法链接 - `tap` 替换

python - 如何使函数定期运行特定持续时间

haskell - 现实世界 Haskell 第 3 章练习 : Binary Tree with 1 value constructor - follow up

mysql - 尝试仅选择是否满足条件

c - 将来自多个函数的数据存储在数组中

c - 通过引用将 char** 传递给函数

date - 当前年份和月份中的天数

haskell - 频繁的 GC 会阻止并行运行 Spark

python else 和 elif 错误

PHP5/MYSQL - IF value1 = value2 然后死,否则执行代码