0
A
回答
1
List.fold_left
是迭代序列的泛函。它是一个函数,它接受一个列表,一些初始值,并将这个函数按顺序应用到列表中的每个元素。这是函数式编程中众所周知的higher order函数。它通常用于循环和迭代,而不是直接使用递归。
当函数本身调用时,尾递归是尾调用的一种特殊情况。基本上,一个调用是尾部的,如果它是函数中的最后一个表达式。所以在通话之后,不需要再进行任何评估。尾调用在OCaml中进行了简化的迭代,即它们不像正常的调用那样消耗栈。
List.fold_left
是使用递归实现的,并且标准实现中的所有递归调用都位于尾部位置。还有一些是List.fold_right
,有些时候是以非递归方式实现的。
3
如果你的问题是“我能做什么用,我不能使用fold_left
,反之亦然尾递归”,得到的回答是:
凡是可以使用fold_left
实现可以使用尾递归的实现fold_left
本身通常使用尾递归来实现。以下几点可以使用尾递归来实现,但不是fold_left
:
- 任何事情如果你遍历比列表以外的东西(比如你正在迭代直到整数为0)。
- 任何你迭代一个列表而不是一次一个元素的地方。
- 任何你迭代列表的地方,但你可能会停止,直到结束。
相关问题
- 1. 尾递归与前向递归
- 2. Javascript尾递归
- 3. 尾递归算法归并
- 4. 方案尾递归
- 5. 尾递归连续
- 6. 尾递归函数
- 7. 尾v头递归
- 8. 计划。尾递归?
- 9. Erlang中的尾递归与前向递归
- 10. 尾递归vs原始递归
- 11. Clojure尾数递归与素因子
- 12. 堆栈溢出与尾递归
- 13. 斯卡拉尾递归为未尾递归
- 14. Java尾递归:低于斐波那契码尾递归?
- 15. java中的尾递归
- 16. 尾递归和迭代SML
- 17. Bash中的尾递归
- 18. R中的尾递归
- 19. 折叠左尾递归?
- 20. 对象的尾递归
- 21. java.lang.StackOverflowError的Clojure中尾递归
- 22. 可以函数尾递归
- 23. 了解F#尾递归
- 24. Scala中的尾递归findNextAndTail
- 25. 汇编中的尾递归
- 26. 斯卡拉的尾递归
- 27. 斯卡拉尾递归
- 28. 尾递归堆栈溢出
- 29. 尾递归归并排序OCaml中
- 30. 将递归函数转换为尾递归
尾递归是一种编程概念,而'List.fold_left'是一个使用它的函数?你的问题还不太清楚...... – PatJ 2015-04-01 22:31:19
新来者的典型混乱之一...... – camlspotter 2015-04-02 01:11:17