Lisp语言中有高阶函数的概念,即函数可以作为函数的参数,也可以作为函数的返回值。例如: (define (square x) (* xx)) 定义了一个求x的平方的函数 (define (inc x) (+ x1)) 定义了一个求x+1的函数 (define (combine f g) (lambda (x) (f (+ (fx) (g x))))) (combine f g) 返回函数k , k(x) = f( f(x)+g(x)) 因此 ((combine square inc) 3) 的返回值就是169 此处 f(x) = x*x g(x) = x + 1 k(x) = (x*x+(x+1)) ^2 ((combine square inc) 3) 即是 k(3) 因此返回值为169 用C++实现类似的combine函数模板,使得下面的程序输出结果为 169 10.75 #include <iostream> using namespace std; // 在此处补充你的代码 int main() { auto Square = [] (double a) { return a * a; }; auto Inc = [] (double a) { return a + 1; }; cout << combine<decltype(Square),decltype(Inc),int>(Square,Inc)(3) << endl; cout << combine<decltype(Inc),decltype(Square),double>(Inc,Square)(2.5) << endl; return 0; }
时间: 2023-06-14 16:04:47 浏览: 187
无涯教程(LearnFk)-函数式编程教程离线完整版.pdf
可以使用函数模板和 Lambda 表达式来实现类似的 combine 函数模板,代码如下:
```cpp
#include <iostream>
using namespace std;
template<typename F, typename G, typename T>
auto combine(F f, G g) {
return [f, g](T x) {
return f(f(x) + g(x));
};
}
int main() {
auto Square = [](double a) { return a * a; };
auto Inc = [](double a) { return a + 1; };
cout << combine<decltype(Square), decltype(Inc), int>(Square, Inc)(3) << endl;
cout << combine<decltype(Inc), decltype(Square), double>(Inc, Square)(2.5) << endl;
return 0;
}
```
输出结果为:
```
169
10.75
```
阅读全文