Clojure连续权力

use*_*646 3 clojure

一个程序员将​​如何从1开始连续产生两个连续的幂?

我看到文档http://clojuredocs.org/clojure_core/1.2.0/clojure.core/iterate但仍然需要帮助.谢谢.

sta*_*203 8

将任务分为两个步骤.

如果您首先创建一个懒惰的无限(无需事先决定您需要的最大功率)2的幂序列,您可以随后以您选择的任何方式对其进行切片和切块

(def powers-of-2 (iterate (partial *' 2) 2))

获得前n个权力

(take 5 powers-of-2)

获得低于70的权力

(take-while (partial > 70) powers-of-2)

添加:

其实我更喜欢更一般的形式:

(defn powers-of [n] (iterate (partial *' n) n))

(take 5 (powers-of 2))

除了你更有一般性,除非你有效率问题,通过每次调用一个新的延迟序列的高阶函数你避免保持头部并允许内存被垃圾收集.

  • 即使是专门的2种形式也应该是(无论证)定义,而不是定义.否则序列永远不会被垃圾收集,并且试图找到两个百亿分之一的力量可能会让你失去记忆. (4认同)