高阶函数方案:通过返回值递增

时间:2015-10-05 03:27:47

标签: function syntax parameters lambda scheme

我在Scheme

中遇到某些功能问题

因此,在本书中,我了解了我遇到的问题,我还没有完全掌握这个问题。

它要我创建一个执行此操作的高阶函数:

(display ((incrementn 4) 2))
6

我已经被困在这几个小时,但似乎仍然没有理解基本面。所以我转向大家,希望我能更好地理解这个功能性的电话。

所以到目前为止我理解它的方式是当我们定义一个这样的函数时:

(define (increment n) ______)

空白空间显然代表我对给出的参数的以下操纵。我似乎无法理解的是高阶函数如何返回外部参数(增量函数)并将其注入定义的函数((增量3))

我完全理解3是我们增加n次的初始值(整数)(n是在((incrementn n)x)之外传递的参数,我们将n递增1倍

我问你的问题是,假设x是一个未绑定的变量(对吗?),我如何返回该整数并多次将n递增1?这种行为的语法是什么?

1 个答案:

答案 0 :(得分:0)

这里要理解的是,在我们使用incrementn作为初始参数调用3之后,它将返回函数,然后2作为参数传递给该函数。这被称为currying,在您掌握了这里的概念后,解决方案很简单:

(define (incrementn n)
  (lambda (x)
    (+ n x)))

正如您所看到的,对incrementn 的调用会在返回的n中捕获 lambda参数的值,并在我们调用它时传递{ {1}},x可用于n正文中的表达式。现在,它按预期工作:

lambda