Clojure 函数式编程与状态管理
函数式编程中的序列处理
在函数式编程里,我们可以借助序列来高效获取特定的值。以下代码展示了如何定义序列并获取其中的值:
(def m-seq (map m (iterate inc 0)))
(def f-seq (map f (iterate inc 0)))
现在,调用者可以通过获取序列中的第 n 个值来得到 M(n) 或 F(n) :
(nth m-seq 250)
; -> 155
这种方法速度相当快,即便对于较大的 n 值也是如此:
(time (nth m-seq 10000))
; "Elapsed time: 0.735 msecs"
; -> 6180
这种方法的步骤如下:
1. 以自然的方式定义相互递归的函数。
2. 使用记忆化(memoization)来对已经计算过的值进行递归短路。
3. 公开一个序列,以便在需要之前缓存依赖的值。
不过,这种方法会消耗大量堆内存,因为它会缓存所有之前看到的值。若这是个问题,在某些情况下可以通过选择更复杂的缓存策略来解决。
Clojure 为函数式编程提供了多种技术,如
超级会员免费看
订阅专栏 解锁全文
42

被折叠的 条评论
为什么被折叠?



