![]() | 1 dangyuluo 2022-11-09 06:10:55 +08:00 一句话里好多语法时态错误 |
![]() | 3 dingwen07 2022-11-09 06:31:31 +08:00 ![]() 因为一两句话说不清楚的原因,如果不用递归就得这么写: 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 ![]() 这个还好吧 我之前看一段 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 |