定义一个返回调用参数函数两次的函数的函数

原题是这样:

定义一个过程 Double, 它以一个有一个参数的过程为参数, Double 返回一个过程, 这一过程将原来那个参数过程应用两次。例如, 若 Inc 是个给参数加一的过程, Double(Inc) 将给参数加二。

那么, 下面的表达式会返回什么值:

Double(Double(Double(Inc)))(5)

我当时的思路是:

using cint = const int;
using iFun = function<int(cint&)>;

iFun Double (iFun f)
{
    return f(f(?));
}

而问题就在于, 里面的 “?” 该如何处理。 里面是该有个参数, 可是参数从何而来?

后来我才反应过来, 是要返回的函数需要一个参数, 于是应该为:

using cint = const int;
using iFun = function<int(cint&)>;

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;
}
时间: 2024-10-14 20:56:28

定义一个返回调用参数函数两次的函数的函数的相关文章

python进阶之装饰器之2.定义一个可接受参数的装饰器、如何定义一个属性可由用户修改的装饰器、定义一个能接受可选参数的装饰器

2.1.定义一个接受参数的装饰器 前言:在理解上一篇文章的基础上理解定义一个接受参数的装饰器 思路:在装饰器函数的外层再定义一个接受参数的函数,让他返回装饰器函数,在装饰器函数中进行相关参数的进行操作 代码解析如下: from functools import wrapsimport logging# 定义外层函数logged,使用return decorate返回装饰器函数def logged(level, name=None, message=None): """ Add

第九天 什么是函数,函数的return的用法,函数的传参

1 函数 1内置函数(Python解释器中自带的函数,可以直接调用) 2自定义函数(自己写的函数) 注意自己写的函数,必须先定义,在调用,定义了的函数可以在任意位置调用 什么是函数 函数就是具有某个具体功能的工具 为什么要用函数 提供开发效率 减少代码冗余 提高程序的扩展性 定义一个函数 def是定义函数的关键字 函数名:函数名的命名规则与变量名一致 1.不能以关键字(******) 2.函数也应该做到见名知意 函数在定义的时候只检测函数体语法 不执行函数体代码 def func(): prin

python 练习题:定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程ax^2+bx+c=0的两个解

请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程 ax^2+bx+c=0的两个解. 提示: 一元二次方程的求根公式为: x1 = (-b + math.sqrt((b * b) - (4 * a * c))) / (2 * a)x2 = (-b - math.sqrt((b * b) - (4 * a * c))) / (2 * a) 计算平方根可以调用math.sqrt()函数 # -*- coding: utf-8 -*- # 请定义一个函数quadrati

请定义一个函数 quadratic(a, b, c),接收 3 个参数,返回一元二次方程: ax2 + bx + c = 0 的两个解

import math # 定义一个函数,接受三个参数,返回一个一元二次方程的两个解 def quadratic(a,b,c): m=b*b-4*a*c if m>=0: x=(-b+math.sqrt(m))/(2*a) y=(-b-math.sqrt(m))/(2*a) return x,y else: return 'no answer!' print(quadratic(2,3,1)) # 快速复制到下一行,CTR+D. print(quadratic(1,3,1)) print(qua

定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl

因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式. 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Complex C1,Complex C2) 求两个复数的差的方法:(参数

函数初识:定义,调用,返回值,参数

一 函数的定义,调用,返回值 1.函数的作用: 封装 减少重复代码 2.函数的书写格式 def 关键字 定义一个函数 def 函数名(): 缩进 函数体(代码块) def func(): print('我') print('爱') print('你') return '1314' #返回值,将内容返回给调用者 #不写return或写了return不写值返回None msg = func() #函数名() -- 调用 print(msg) return返回多个变量是,返回的是元祖形式,返回的内容不

【c语言】为下面的函数原型编写函数定义,这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。

/*为下面的函数原型编写函数定义: int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数. 如果字符串参数包含了任何非数字字符,函数就返回零.请不必担心算数溢出. 提示:这个技巧很简单:你每发现一个数字,把当前值乘以10,并把这个值和新的数字所代表的值相加*/ #include <stdio.h> int ascii_to_integer(char const *str) { int sum =

函数的定义及其返回值、参数等相关操作

在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下: while True: if cpu利用率 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 硬盘使用空间 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 内存占用 > 80%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 仔细一看上述代码,i

python中参数组 *args,**kwargs,位置参数(一个星*返回元祖),关键字参数(两个星*返回字典)

# 参数组 *args def send_mail(*names): for name in names: print('%s发测试报告!'%name) send_mail() # 不传参数!send_mail('路明') # 传一个参数:发测试报告! ('路明',) 返回元祖send_mail('曹雪莲','dxl','zhangshan') # 传多个参数:发测试报告! ('曹雪莲', 'dxl', 'zhangshan') def szz(name,age,sex,addr,phone,q