自定义函数复合实现求助:编写manual函数完成函数复合
自定义Scheme复合函数
manual的正确实现 你的核心问题在于:当前的manual函数没有返回一个可接收参数的过程,而是在定义时就直接尝试执行func1和func2——但此时func2没有传入参数,自然无法得到正确结果。
要实现函数复合,manual需要返回一个匿名过程(lambda),这个过程会在被调用时(比如传入1),先将参数传给func2,再把func2的结果传给func1。正确代码如下:
(define (manual func1 func2) (lambda (x) (func1 (func2 x))))
验证示例
定义两个测试函数:
(define func2 (lambda (n) (* n 2))) ; 输入乘2 (define func1 (lambda (n) (expt n 3))) ; 输入求三次方
调用((manual func1 func2) 1)时,执行流程是:
- 匿名过程接收参数
1,先调用(func2 1)得到2 - 再将
2传入func1,调用(func1 2)得到8,符合预期结果。
为什么之前的代码不对?
你之前的写法(func1 (func2))会在manual被调用时就立即执行:此时func2没有参数,会报错或返回错误值;同时manual返回的是func1的执行结果,而不是一个可以后续接收参数的过程——这完全不符合函数复合的需求。必须用lambda包装,让manual返回一个“等待接收参数”的过程,才能实现((manual func1 func2) x)的调用形式。
内容的提问来源于stack exchange,提问作者viGor027
相关产品推荐
相关产品推荐

