Clojure编程:序列、延迟求值、类型与宏的深入探索
1. 递归与 loop 和 recur
在函数式编程中,递归是常用的技术,但由于JVM不支持隐式尾递归优化,Clojure需要使用 loop 和 recur 来实现尾递归。
1.1 递归计算向量大小
(defn size [v]
(if (empty? v)
0
(inc (size (rest v)))))
(size [1 2 3])
上述代码通过递归的方式计算向量的大小。当向量为空时,大小为0;否则,大小为1加上剩余部分的大小。
1.2 使用 loop 和 recur 优化
(defn size [v]
(loop [l v, c 0]
(if (empty? l)
c
(recur (rest l) (inc c)))))
在这个版本中,使用 loop 和 recur 进行尾递归优化。 loop 绑定 l 和 c ,当 l 为空时返回 c
超级会员免费看
订阅专栏 解锁全文
11

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



