auto rec = [&](auto self, int x) -> int

时间: 2024-04-25 22:24:50 浏览: 6
这是一个使用lambda表达式定义的递归函数。函数名为`rec`,参数包括一个自身引用`self`和一个整数`x`。返回类型为`int`。 在lambda函数体内部,可以通过调用`self`来递归调用自身。`self`是一个函数对象,它接受相同的参数类型和返回类型,以及递归调用时所需的参数。 这种技术称为"带有递归的lambda",它在C++14中被引入。它可以用于编写递归函数,而不需要显式定义函数。
相关问题

解释下Peoplesoft的这段代码 Component array of array of any &tmpArray; Local Record &rec1, &rec2; &rec1 = CreateRecord(Record.HIK_IPSANRS_TBL); &rec2 = CreateRecord(Record.HIK_IPSAN_TBL); Local Rowset &rsLvl1, &rsDtl; Local number &i, &j; Local Row &row; &rsLvl1 = GetLevel0()(1).GetRowset(Scroll.WPS_STR_INF_TBL); For &i = 1 To &rsLvl1.ActiveRowCount &rsDtl = &rsLvl1(&i).GetRowset(Scroll.WPS_STR_DTL_TBL); For &j = 1 To &rsDtl.ActiveRowCount &row = &rsDtl(&j); If Not &row.IsDeleted Then If All(&row.WPS_STR_DTL_TBL.WPS_GP_AMT_ID.Value) Then &rec1 = CreateRecord(Record.WPS_IPSANRS_TBL); &rec1.WPS_GP_AMT_ID.Value = &row.WPS_STR_DTL_TBL.WPS_GP_AMT_ID.Value; &rec1.EFFDT.Value = &row.WPS_STR_DTL_TBL.EFFDT.Value; If &rec1.SelectByKey() Then &rec1.WPS_GP_AMT_ID.Value = &row.WPS_STR_DTL_TBL.WPS_GP_AMT_ID.Value; &rec1.EFFDT.Value = &row.WPS_STR_DTL_TBL.EFFDT.Value; &rec1.STATUS.Value = &rsLvl1(&i).WPS_STR_INF_TBL.STATUS.Value; &rec1.Update(); Else &rec1.WPS_GP_AMT_ID.Value = &row.WPS_STR_DTL_TBL.WPS_GP_AMT_ID.Value; &rec1.EFFDT.Value = &row.WPS_STR_DTL_TBL.EFFDT.Value; &rec1.STATUS.Value = "A"; &rec1.Insert(); End-If; &rec2 = CreateRecord(Record.WPS_IPSAN_TBL); &rec2.WPS_GP_AMT_ID.Value = &row.WPS_STR_DTL_TBL.WPS_GP_AMT_ID.Value; &rec2.EFFDT.Value = &row.WPS_STR_DTL_TBL.EFFDT.Value; &rec2.WPS_STORID.Value = &row.WPS_STR_DTL_TBL.WPS_STORID.Value; &rec2.WPS_GP_WAGECODE.Value = &row.WPS_STR_DTL_TBL.WPS_GP_WAGECODE.Value; If Not &rec2.Insert() Then &rec2.Update(); End-If; End-If; End-If; End-For; End-For;

这段代码是一个PeopleCode脚本,用于在PeopleSoft系统中进行数据操作。 首先,定义了一个Component类型的数组变量&tmpArray。然后,创建了两个Record类型的本地变量&rec1和&rec2,分别对应PeopleSoft中的两个表格。接着,创建了两个Rowset类型的本地变量&rsLvl1和&rsDtl,并定义了两个number类型的本地变量&i和&j。 在循环中,通过GetLevel0()方法获取Level0的第一行,并通过GetRowset()方法获取Scroll.WPS_STR_INF_TBL的Rowset。然后,循环遍历&rsLvl1中的每一行,再通过GetRowset()方法获取Scroll.WPS_STR_DTL_TBL的Rowset。接着,在&rsDtl中循环遍历每一行,如果当前行未被删除且满足一定条件,则执行下面的操作。 首先,判断&row中的WPS_STR_DTL_TBL.WPS_GP_AMT_ID.Value是否全部存在,如果是,则创建一个新的&rec1记录,并将一些属性值赋给它。如果该记录已存在于数据库中,则更新它,否则插入新记录。 然后,创建一个新的&rec2记录,并将一些属性值赋给它。如果该记录不存在于数据库中,则插入新记录,否则更新它。 最后,循环结束后,该脚本会执行一些数据操作,例如更新或插入记录到数据库中。

帮我把下面一段C++代码改写成python代码:#include "Trade.h" #include "WPrice.h" #include <algorithm> double normalCDF(double x) // Phi(-∞, x) aka N(x) { return std::erfc(-x / std::sqrt(2)) / 2; //erfc()是互补误差函数,该返回值表示标准正态分布下var小于x的概率,即N(x) } CTrade::CTrade(double tick) : wp_bid(0.01), wp_ask(0.01), m_tick(tick), m_TimeRound(50) { newday(NULL); } CTrade::~CTrade() { } void CTrade::OnBook(const BTRec& btRec) { wp.setGamma(0.1); wp_bid = wp.getWP(&btRec.Bids); wp_ask = wp.getWP(&btRec.Asks); if (wp_mid > 0){ //wp_mid初始化为-1,仅遇到第一条BTRec记录时条件为false double wp_now = (wp_bid + wp_ask) / 2; //updated wp_mid int volume = btRec.volume; //volume between two orderbook records double ratio = normalCDF((wp_now - wp_mid) / (2 * m_tick)); //m_tick = tick = 0.2 double buyvolume = ratio*volume, sellvolume = (1 - ratio)*volume; m_TimeRound.update(buyvolume, sellvolume, btRec.rec_time.timestamp); //volume moving average if (mv_volume < 0) { mv_volume = volume; mv_buyvolume = buyvolume; } else{ mv_volume += 0.002*(volume - mv_volume); mv_buyvolume += 0.002*(buyvolume - mv_buyvolume); } // round trip volatility if (time_ini < 0 || btRec.rec_time.timestamp - time_ini >= time_scale){ if (time_ini>0){ double dp = wp_now - wp_ini; volatility += 0.05*(dp*dp - volatility); } time_scale = m_TimeRound.getTime() * 1000; //in milliseconds time_ini = btRec.rec_time.timestamp; wp_ini = wp_now; } } wp_mid = (wp_bid + wp_ask) / 2; } void CTrade::newday(const char* p) { wp_mid = -1; m_TimeRound.newday(p); volatility = 16 * m_tick*m_tick; time_slapse = -1, time_scale = -1, wp_ini = -1, time_ini = -1; mv_buyvolume = mv_volume = -1; }

```python import math class CTrade: def __init__(self, tick): self.wp_bid = 0.01 self.wp_ask = 0.01 self.m_tick = tick self.m_TimeRound = TimeRound() self.newday(None) def OnBook(self, btRec): self.wp.setGamma(0.1) self.wp_bid = self.wp.getWP(btRec.Bids) self.wp_ask = self.wp.getWP(btRec.Asks) if self.wp_mid > 0: wp_now = (self.wp_bid + self.wp_ask) / 2 volume = btRec.volume ratio = normalCDF((wp_now - self.wp_mid) / (2 * self.m_tick)) buyvolume = ratio * volume sellvolume = (1 - ratio) * volume self.m_TimeRound.update(buyvolume, sellvolume, btRec.rec_time.timestamp) if self.mv_volume < 0: self.mv_volume = volume self.mv_buyvolume = buyvolume else: self.mv_volume += 0.002 * (volume - self.mv_volume) self.mv_buyvolume += 0.002 * (buyvolume - self.mv_buyvolume) if self.time_ini < 0 or btRec.rec_time.timestamp - self.time_ini >= self.time_scale: if self.time_ini > 0: dp = wp_now - self.wp_ini self.volatility += 0.05 * (dp * dp - self.volatility) self.time_scale = self.m_TimeRound.getTime() * 1000 self.time_ini = btRec.rec_time.timestamp self.wp_ini = wp_now self.wp_mid = (self.wp_bid + self.wp_ask) / 2 def newday(self, p): self.wp_mid = -1 self.m_TimeRound.newday(p) self.volatility = 16 * self.m_tick * self.m_tick self.time_slapse = -1 self.time_scale = -1 self.wp_ini = -1 self.time_ini = -1 self.mv_buyvolume = -1 self.mv_volume = -1 def normalCDF(x): return math.erfc(-x / math.sqrt(2)) / 2 class TimeRound: def __init__(self): self.buy_volume = 0 self.sell_volume = 0 self.time = 0 def update(self, buyvolume, sellvolume, timestamp): if timestamp > self.time: self.buy_volume = 0 self.sell_volume = 0 self.time = timestamp self.buy_volume += buyvolume self.sell_volume += sellvolume def getTime(self): return self.buy_volume + self.sell_volume ```

相关推荐

最新推荐

recommend-type

h265官方文档__T-REC-H.265-201504-I!!PDF-E.pdf

T-REC-H.265-201504-I!!PDF-E,h265官方文档(英文)
recommend-type

T-REC-G.8261-200605-China.pdf

G.8261时钟同步中文标准,G系列:传输系统和媒质、数字系统和网络 经传送网的以太网概况 — 质量与可用性指标 Y系列:全球信息基础设施、互联网协议问题和下一代网络 互联网协议问题 — 传送
recommend-type

微信小程序-番茄时钟源码

微信小程序番茄时钟的源码,支持进一步的修改。番茄钟,指的是把工作任务分解成半小时左右,集中精力工作25分钟后休息5分钟,如此视作种一个“番茄”,而“番茄工作法”的流程能使下一个30分钟更有动力。
recommend-type

激光雷达专题研究:迈向高阶智能化关键,前瞻布局把握行业脉搏.pdf

电子元件 电子行业 行业分析 数据分析 数据报告 行业报告
recommend-type

安享智慧理财测试项目Mock服务代码

安享智慧理财测试项目Mock服务代码
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。