我看到一些示例表明我们可以在 clojure 中对序列进行很好的头/尾解构,如下所示:
(if-let [[x & xs] (seq coll)]
但是我认为这对于惰性序列来说不会像期望的那样工作,因为这会将值放入一个向量中,而不是惰性的。我尝试将矢量形式更改为列表形式,它给了我绑定错误,无论是否引用。
如果没有这样的绑定,似乎如果我有一个惰性序列,其中每个元素都是前一个元素的计算密集型方程,我必须进行两次计算才能将头部和尾部作为单独的语句,正确的?
(let [head (first my-lazy-seq) ;; has to calculate the value of head.
tail (rest my-lazy-seq)] ;; also has to calculate the value of head to prepare the rest of the sequence.
有什么办法可以解决这个问题,还是我在某处做出了不正确的假设?