用WPS新公式LET和LAMBDA写循环的小套路

wils
wils

创作者俱乐部成员

有些时候for循环很方便,在公式里大概可以这样写:

=LET(f,LAMBDA(x,y,IF(x=0,DROP(y,1),f(x-1,VSTACK(y,x)))),f(5,""))

这一句是生成等差数列,平时用数组公式或自动填充都能解决,这里只是演示循环:

  1. 定义一个函数f,带两个参数x和y,x用来存储状态的变化(类似for i in range这里的i),y用来存储结果的数组(类似尾递归优化时把每一步的结果存入参数列表,保证栈不会无限增长)

  1. 函数f的结构是,参数x,参数y,如果状态x达到终点比如这里等于0,那么直接返回结果y,否则y再次调用f递归的变化(可以考虑广度或深度优先搜索)

  1. 所以上面这一句里,let f lambda x y if这几个地方都是固定的套路,只有vstack这里是真正的逻辑

  1. 总的意思是说,从5开始逐步减1,每次把这个数加入结果数组,所以应该输出{5;4;3;2;1}这样一个数组,也就大概这个意思

for i in range(5,0,-1):

    ret.append(i)

  1. drop和初始参数""是为了vstack不报错,没啥意义。。。

如果感兴趣,可以用这个套路嵌套着写递归,比如排列组合问题

广东省
浏览 2678
3
4
分享
4 +1
7
3 +1
全部评论 7
 
鹤
打卡
· 河南省
回复
 
xxp
₍˄·͈༝·͈˄*₎◞ ̑̑
· 中国
1
回复
 
漩涡卡洛特
学习
· 北京
回复
 
xxp
(∗❛ั∀❛ั∗)✧*。
· 中国
1
回复
 
wils
wils

创作者俱乐部成员

刚刚发现,这竟然只在wps可行,xl365里需要手动定义lambda名称然后才能调用,麻烦很多。。。也就是说excel里的let就是let,wps里的let是letrec,NB
· 广东省
回复
 
亂雲飛渡
亂雲飛渡

WPS寻令官

收藏学习
· 广东省
回复
 
拾光漫行
拾光漫行

WPS函数专家

代码表示方法用的python,大佬 厉害
· 重庆
回复