我应该使用循环吗?

时间:2014-09-20 19:49:03

标签: loops recursion functional-programming tail-recursion ml

我一直在学习ML中的函数式编程,因为我得到了一段时间 注重递归和尾递归。 几乎(而不是每一个)循环我用其他语言编写我写的尾递归函数。 我应该继续这样做,还是会混淆我未来的同龄人或者每个人?

1 个答案:

答案 0 :(得分:3)

Tail recursive calls是在ML(或Ocaml)语言(或者Scheme,甚至是大多数Common Lisp中)编码“循环”的正确方法,但遗憾的是不在具有迭代结构的MELT

看看,例如以标准库的源代码为例(例如Ocaml的stdlib)。

尾巴召唤呼叫不会让你的同伴感到困惑,他们对此很熟悉。

顺便说一下,你也可以感觉到程序语言中的普通循环(例如C或Java或C ++)是非常隐藏的尾递归调用。这是一个意见问题。

BTW,在Ocaml中,我通常将fooloop命名为(用有意义的名称替换foo,例如findloopscanloop ...)内部尾递归函数。 ..

当然,在Ocaml中使用尾递归内部函数更具惯用性,例如:使用while构造...

查看尾递归调用的另一种方法是它们实际上是“带参数的getos”(并且通常实现为机器跳转指令,并在机器寄存器中传递一些值)。