程序員將如何繼續從1開始產生兩個連續的冪,直到極限?Clojure連續發展權
我看到了文檔http://clojuredocs.org/clojure_core/1.2.0/clojure.core/iterate,但仍然需要幫助。謝謝。
程序員將如何繼續從1開始產生兩個連續的冪,直到極限?Clojure連續發展權
我看到了文檔http://clojuredocs.org/clojure_core/1.2.0/clojure.core/iterate,但仍然需要幫助。謝謝。
這裏有一種方法:
(defn powers-of-two
[n]
(map ; we are mapping over a sequence
(comp int #(Math/pow 2 %)) ; a composition of two functions
; Math/pow returns doubles so int is used to make them into integers
(range 1 (inc n)))) ; a sequence from 1 to 10
(powers-of-two 15) ;=> (2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768)
您可以使用for
形式:
(def powers (for [x (range)]
(java.lang.Math/pow 2 x)))
(take 10 powers)
(1.0 2.0 4.0 8.0 16.0 32.0 64.0 128.0 256.0 512.0)
但是直到特定例如,(power-of-two 70(fn [p](println「兩者的威力都是」p)) – user1585646
他只是向你展示瞭如何用'(取10個冪) 。 – Rayne
@ user1585646 - 如果你不斷糾正人們的答案,也許你應該修改你的問題。 – noahlz
獨立的任務分爲兩個步驟。
如果先創建一個懶惰的無限(無需事先決定你需要的最大功率)的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))
同時,作爲更普遍的,除非你有效率的關注,通過調用每次對於一個新的惰性序列,您避免保持頭部並允許內存被垃圾收集。
有兩種方法來解釋「限制」,並從您的問題,它不知道你是什麼意思。
此外,你說「從1開始到極限」。你的意思是「從0^2開始(即1)到極限」或「從1^2開始(2)」?在下面的例子中,我假設你想從0^2開始。如果您想從1^2開始,請在下面的代碼中將(range)
替換爲(drop 1 (range))
。
在第一種解釋中,「限制」的意思是「給我一個n個元素的序列,其中元素是兩個連續的冪」。 ANKUR等人展示瞭如何做到這一點:
;; return the sequence (0^2, 1^2, 2^2 ... 149^2)
(take 150 (for [x (range)] (java.lang.Math/pow 2 x)))
; => (1.0 2.0 4.0 8.0 ..... 7.1362384635297994E44)
;; this is functionally equivalent:
(for [x (range 150)] (java.lang.Math/pow 2 x))
另一個解釋是「給我的是小於限制大小的兩個連續的權力序列」。你可以用下面的方法做到這一點:
;; return the sequence (0^2, 1^2, 2^2 ... 2^7)
(for [x (range) :let [r (Math/pow 2 x)] :while (< r 150)] r)
; => (2.0 4.0 8.0 16.0 32.0 64.0 128.0)
但是達到了特定的選擇數量。例如,(power-of-two 70(fn [p](println「two's power of」p)) – user1585646
@ user1585646你可以把它放在一個函數中,我將更新我的答案 – ponzao