如何生成xn * n / 10多个式子相加的元代码

元编程:<wd_nBidPrice1*0.1 + wd_nBidPrice2*0.2 + wd_nBidPrice3*0.3 +...+wd_nBidPrice10*1.0> 这一句是10个相同结构的式子相加,如何用循环来生成?

,若有更多项,假设有100项,这个CODE中包含n项,每项结构为xn * n / 10,手写非常麻烦,能否用for (n in 1..100){}生成这个元代码?

请先 登录 后评论

3 个回答

wale


script="wd_nBidPrice1*0.1 "
for(n in 2..10){
script+="+ wd_nBidPrice"+ n + "*"+n\10 
}
parseExpr(script)
请先 登录 后评论
mhxiang

可以使用binaryExpr和unifiedExpr实现以上的功能

n=10
colNames=`wd_nBidPrice+string(1..n)
weights=1..n\10
weights_ = array(ANY, size(weights)).fill!(1..size(weights)-1, weights)
selects = sqlColAlias(unifiedExpr(binaryExpr(sqlCol(colNames), weights_, *), take(+, size(weights)-1)), "weightedSum");
 sql(selects, tb);

结果如下:

< select (wd_nBidPrice1 * 0.1) + (wd_nBidPrice2 * 0.2) + (wd_nBidPrice3 * 0.3) + (wd_nBidPrice4 * 0.4) + (wd_nBidPrice5 * 0.5) + (wd_nBidPrice6 * 0.6) + (wd_nBidPrice7 * 0.7) + (wd_nBidPrice8 * 0.8) + (wd_nBidPrice9 * 0.9) + (wd_nBidPrice10 * 1) as weightedSum from tb30d27206e77f0000 >
请先 登录 后评论
blliu

可以使用如下代码解决您的问题

n = 10
sql(sqlColAlias(unifiedExpr(binaryExpr(sqlCol("wd_nBidPrice"+ string(1..n)), (1..n\10)$ANY, *), take(+, n-1)), "weightedSum"), t).eval()



请先 登录 后评论