Range 以结束参数作为排他。
> (range 1 3)
(1 2)
我希望有一个类似于 range 但包含结束状态的函数。
> (inclusive-range 1 3)
(1 2 3)
不幸的是,这并不等同于将结束状态添加到 range 返回的 seq 中。
> (inclusive-range 1 2.5)
(1 2)
我相信 Clojure 中没有提供直接实现这个功能的方法,但我找到了一个有用的小技巧。我已经写了一个功能(虽然不是懒惰的)。
(defn inclusive-range
"Return a sequence of nums from START to END, both inclusive, by STEP."
([start end]
(inclusive-range start end 1))
([start end step]
(let [test-for-done (if (< start end)
>
<)]
(if (test-for-done start (+ start step))
[]
(loop [nums []
cur start]
(if (test-for-done cur end)
nums
(recur (conj nums cur)
(+ cur step))))))))
我是不是错过了更好的方法?这是否可以添加到 Clojure 中?