2015-10-05 61 views
1

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

一些功能问题

所以在这本书中,我正在学习有关方案我已经遇到这个问题,我不太把握尚未。

它要求我创建一个高阶函数,这是否:

(display ((incrementn 4) 2)) 
6 

我一直停留在此的几个小时,似乎仍然没有理解的基础。所以我转向你们,希望我能更好地理解这个功能性呼叫。

所以我的理解是到目前为止的方式是,当我们定义像这样一个功能:

(define (increment n) ______) 

的空格显然代表我下面给出的参数操作。我似乎不明白的是高阶函数如何返回(增量函数的)外部参数并将其注入到已定义函数(即(incrementn 3))

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

我问你简单的问题是给定x是一个未绑定的变量(对吧?)如何返回该整数并且n多次增加n?这种行为的语法是什么?

回答

0

的了解这里的一点是,我们所说的incrementn3作为初始参数后,它会返回一个功能,而且事后2被作为参数传递给该函数传入。这就是所谓的currying,你在这里打球把握概念后的解决方案很简单:

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

正如你所看到的,调用incrementn捕捉在返回lambdan参数的值,并当我们称它通过x时,nlambda正文中的表达式中使用。现在,它按预期工作:

((incrementn 4) 2) 
=> 6 

((incrementn -1) 3) 
=> 2 
+0

所以incrementn在这种情况下,不仅考虑在N,它也是走在(拉姆达(X)),即使还有它的incrementn的定义之外?编辑:你在编辑回答,谢谢 –

+0

此外,它是递增的,所以从*更改为+将是正确的,因为((incrementn -1)3)= 2(这是他作为另一个例子) –

+0

@S。 Shaw ok,明白了 - 现在已经修复了:) –