1
dangyuluo 2022-11-09 06:10:55 +08:00
一句话里好多语法时态错误😓
|
3
dingwen07 2022-11-09 06:31:31 +08:00 1
因为一两句话说不清楚的原因,如果不用递归就得这么写:
def apply_many(f): agg = f while True: yield agg new = lambda agg=agg: lambda x: f(agg(x)) agg = new() |
4
geelaw 2022-11-09 07:45:42 +08:00
这个其实很好理解,就是:
apply_many(x) = x + x^2 + x^3 + x^4 + ... = x + x (x + x^2 + x^3 + ...) = x + x apply_many(x) 如果你把 + 理解为列表拼接并把 * 理解为函数复合 |
5
hbdh5 2022-11-09 09:21:33 +08:00
haskell 可以更简洁
apply_many f = iterate nxt f where nxt f = f . f |
6
hbdh5 2022-11-09 09:30:08 +08:00
或者 apply_many f = iterate (. f) f
|
7
CzaOrz 2022-11-09 09:37:20 +08:00
一般程序员看递归都会有点困惑,像我这种有点经验的,看了也是一脸懵逼 [旺柴]
|
8
Alias4ck 2022-11-09 09:46:15 +08:00 1
这个还好吧 我之前看一段 high order 的代码实现 kv store 才叫有趣 https://gist.github.com/noahlias/083195d728fc722d663c7432cbd612cc
|
9
shuizhongyu10 2022-11-09 10:14:57 +08:00
@Alias4ck 有意思哦 问下除了涨见识外 这种代码有什么实际的应用吗?
|
10
lookStupiToForce 2022-11-09 11:14:04 +08:00
提个问题,有大佬帮忙解答吗?
如果不按 next(gen) 去调用,是否会造成无限递归或者内存泄漏? |
11
lookStupiToForce 2022-11-09 11:58:23 +08:00
另外 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 |