【发布时间】:2013-01-16 04:29:28
【问题描述】:
我正在学习函数式编程语言课程,但在“作为参数的函数”的上下文中我很难理解递归
fun n_times(f , n , x) =
if n=0
then x
else f (n_times(f , n - 1 , x))
fun double x = x+x;
val x1 = n_times(double , 4 , 7);
the value of x1 = 112
这将 'x' 加倍 'n' 次,因此 7 加倍 4 次 = 112
我可以理解更简单的递归模式,例如在列表中添加数字或函数的“幂”,但我无法理解这个函数“n_times”如何通过调用自身来评估?能否解释一下这个函数是如何工作的?
我在学习这门课程时标记了 scala,以提高我对 scala(以及函数式编程)的理解,我认为这是一种常见的模式,所以可以提供建议吗?
【问题讨论】:
-
我想这对我来说似乎太明显了。尝试重写方法(可能使用 3 而不是 4 的
n),其中重写顶层调用和每个递归调用,结果将实际参数值替换为对函数体中形式参数的引用.
标签: scala recursion functional-programming sml ml