![]() |
1
dangyuluo 132 天前
一句话里好多语法时态错误😓
|
3
dingwen07 132 天前 ![]() 因为一两句话说不清楚的原因,如果不用递归就得这么写:
def apply_many(f): agg = f while True: yield agg new = lambda agg=agg: lambda x: f(agg(x)) agg = new() |
![]() |
4
geelaw 132 天前
这个其实很好理解,就是:
apply_many(x) = x + x^2 + x^3 + x^4 + ... = x + x (x + x^2 + x^3 + ...) = x + x apply_many(x) 如果你把 + 理解为列表拼接并把 * 理解为函数复合 |
5
hbdh5 132 天前
haskell 可以更简洁
apply_many f = iterate nxt f where nxt f = f . f |
6
hbdh5 132 天前
或者 apply_many f = iterate (. f) f
|
![]() |
7
CzaOrz 132 天前
一般程序员看递归都会有点困惑,像我这种有点经验的,看了也是一脸懵逼 [旺柴]
|
8
Alias4ck 132 天前 ![]() 这个还好吧 我之前看一段 high order 的代码实现 kv store 才叫有趣 https://gist.github.com/noahlias/083195d728fc722d663c7432cbd612cc
|
9
shuizhongyu10 132 天前
@Alias4ck 有意思哦 问下除了涨见识外 这种代码有什么实际的应用吗?
|
10
lookStupiToForce 132 天前
提个问题,有大佬帮忙解答吗?
如果不按 next(gen) 去调用,是否会造成无限递归或者内存泄漏? |
11
lookStupiToForce 132 天前
另外 op 的递归生成函数的函数,怎么改才能使它支持使用任意数量参数的函数(这个函数使用多少个变量就能返回多少个变量)啊?😂
|
![]() |
12
amlee OP ![]() @lookStupiToForce 我不知道你指的是不是 apply_many 中传入的 f 具有多个参数?
如果是的话,可以考虑不要改 apply_many ,而是使用柯里化处理 f ,生成一个新的单一参数的函数,再给 apply_many 处理。 另外,不用柯里化的话,python 自带的 partial 也能做到跟柯里化差不多的效果。https://docs.python.org/zh-cn/3/library/functools.html#functools.partial |