原题是这样:
定义一个过程 Double, 它以一个有一个参数的过程为参数, Double 返回一个过程, 这一过程将原来那个参数过程应用两次。例如, 若 Inc 是个给参数加一的过程, Double(Inc) 将给参数加二。
那么, 下面的表达式会返回什么值:
Double(Double(Double(Inc)))(5)
我当时的思路是:
using cint = const int;using iFun = function;iFun Double (iFun f){ return f(f(?));}
而问题就在于, 里面的 “?” 该如何处理。 里面是该有个参数, 可是参数从何而来?
后来我才反应过来, 是要返回的函数需要一个参数, 于是应该为:
using cint = const int;using iFun = function;iFun Double (iFun f){ return[f] (cint &i) { return f(f(i));};}int Inc (cint &i){ return (i + 1);}int main (){ cout << Double(Double(Double(Inc)))(5); cout << endl; return 0;}