iExpr 编程示例与常用运行时函数

快速幂

1
2
3
4
5
6
7
8
9
qpow=(a,n)=>func(
return=1,
while(n>=1,
[
if(n%2==1,return=return*a),
a=a*a,
n=floor(n/2)
])
)

函数极小值

1
2
3
4
5
6
7
8
9
10
eps=0.000001,
fmin=>(ex,x0)=>func(
p:=diffi(ex,x0),
t:=0.3*p,
while(abs(t)>=eps,[
x0=x0-t,
p=diffi(ex,x0),
t=0.3*p]),
return=x0
)

笛卡尔积

1
2
3
4
5
dmul=(a,b)=>func(
return=[],
foreach(a,x,
foreach(b,y,
return=cup(return,[tuple(x,y)]))))

阶乘

1
2
3
4
fac=(n)=>func(
if(n>0,
return=n*fac(n-1),
return=1)),

冒泡排序

1
2
3
4
5
6
7
8
9
10
11
12
13
sort=(l)=>func(
n:=l.len(),
for(i=0,i<n,i=i+1,
for(j=i+1,j<n,j=j+1,
if(val(l,i)>val(l,j),
[t:=val(l,i),
val(l,i,val(l,j)),
val(l,j,t)]
)
)
),
return=l
)

以下函数已有预定义函数,此为近似实现

生成 [1,2,…n]

1
2
3
4
range=(a,b)=>func(
return=[],
for(i:=a,i<=b,i=i+1,
return=cup(return,[i])))

转换函数

1
2
3
4
5
6
7
select=(l,f)=>func(
n:=len(l),
return=array(n),
for(i:=0,i<n,i=i+1,
val(return,i,f(val(l,i)))
)
)

挑选函数

1
2
3
4
5
6
7
8
where=(l,f)=>func(
return=[],
foreach(l,x,
if(f(x),
return=return.cup([x])
)
)
)
0%