高阶函数方案:通过返回值递增
Higher-Order Function Scheme: Incrementing via Returned Value
我在使用 Scheme 中的某些功能时遇到问题
所以在这本书中,我在学习 Scheme 时遇到了这个我还不太了解的问题。
它要求我创建一个执行此操作的高阶函数:
(display ((incrementn 4) 2))
6
我已经坚持了几个小时了,但似乎仍然没有理解基本原理。所以我向大家求助,希望我能更好地理解这个函数调用。
到目前为止我的理解是,当我们定义一个函数时:
(define (increment n) ______)
空格显然代表我对给定参数的以下操作。我似乎不明白的是高阶函数如何 returns 外部参数(增量函数的)并将其注入定义的函数(即 (incrementn 3) )
我完全理解 3 是我们递增 n 次的初始值(整数)(n 是在 ((incrementn n) x) 之外传递的参数)我们 将 n 递增 1 x次
我要问你的问题只是给定 x 是一个未绑定的变量(对吗?)我如何 return 那个整数并将 n 递增 1 那么多次?这种行为的语法是什么?
这里要理解的一点是,在我们以 3
作为初始参数调用 incrementn
之后,它将 return 一个 函数 ,然后 2
作为参数传递给该函数。这称为 currying,在您掌握这里的概念后,解决方案很简单:
(define (incrementn n)
(lambda (x)
(+ n x)))
如您所见,对 incrementn
的调用捕获 returned [=17] 中 n
参数的值=],当我们调用它传递 x
时,n
用于 lambda
正文中的表达式。现在,它按预期工作:
((incrementn 4) 2)
=> 6
((incrementn -1) 3)
=> 2
我在使用 Scheme 中的某些功能时遇到问题
所以在这本书中,我在学习 Scheme 时遇到了这个我还不太了解的问题。
它要求我创建一个执行此操作的高阶函数:
(display ((incrementn 4) 2))
6
我已经坚持了几个小时了,但似乎仍然没有理解基本原理。所以我向大家求助,希望我能更好地理解这个函数调用。
到目前为止我的理解是,当我们定义一个函数时:
(define (increment n) ______)
空格显然代表我对给定参数的以下操作。我似乎不明白的是高阶函数如何 returns 外部参数(增量函数的)并将其注入定义的函数(即 (incrementn 3) )
我完全理解 3 是我们递增 n 次的初始值(整数)(n 是在 ((incrementn n) x) 之外传递的参数)我们 将 n 递增 1 x次
我要问你的问题只是给定 x 是一个未绑定的变量(对吗?)我如何 return 那个整数并将 n 递增 1 那么多次?这种行为的语法是什么?
这里要理解的一点是,在我们以 3
作为初始参数调用 incrementn
之后,它将 return 一个 函数 ,然后 2
作为参数传递给该函数。这称为 currying,在您掌握这里的概念后,解决方案很简单:
(define (incrementn n)
(lambda (x)
(+ n x)))
如您所见,对 incrementn
的调用捕获 returned [=17] 中 n
参数的值=],当我们调用它传递 x
时,n
用于 lambda
正文中的表达式。现在,它按预期工作:
((incrementn 4) 2)
=> 6
((incrementn -1) 3)
=> 2