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中去吗?