按照docs的range
函數有四種形式:Clojure的範圍與特定的起始和無限遠端
(range)
0 - 無限(range end)
0 - 端(range start end)
開始 - 結束(range start end step)
開始 - 結束跳過步驟
那麼我怎樣才能向Infinity聲明代表x
的範圍呢?
我也可能會問如何參考無窮大,像(range x infinity)
可能工作?
按照docs的range
函數有四種形式:Clojure的範圍與特定的起始和無限遠端
(range)
0 - 無限(range end)
0 - 端(range start end)
開始 - 結束(range start end step)
開始 - 結束跳過步驟那麼我怎樣才能向Infinity聲明代表x
的範圍呢?
我也可能會問如何參考無窮大,像(range x infinity)
可能工作?
(iterate inc x)
會給你一個從x
開始的懶惰無限序列號碼。
怎麼是這樣的:
(defn my-range
([start] (iterate inc' start))
([start step] (iterate #(+' % step) start)))
請注意inc'
和+'
支持任意精度。
如何:
(defn range-from [start]
(drop start (range)))
我喜歡這個答案比'iterate'更好的答案背後的直覺,但我不知道'start'是大量是否會浪費計算。 – Mars
@Mars同意 - 我認爲這個答案希望無論效率如何都會被其餘的無限範圍所掩蓋 - 哈! 它保留任何優化表示'範圍'使用... –
如果你想保留範圍,那麼使用@Sean最初提出的解決方案可能是一個更好的主意:'(defn range-from [start](map#( +'start%)(range)))' – zero323