(class (range 10))
;=> clojure.lang.LazySeq
(class (seq (range 10))
;=> clojure.lang.ChunkedCons
Run Code Online (Sandbox Code Playgroud)
据我了解,LazySeq已经是一个序列,因为:
(seq? (range 10))
;=> true
Run Code Online (Sandbox Code Playgroud)
我想我已经有了答案。
这是因为 usingseq强制评估 的第一个元素LazySeq。因为当集合和序列为空时seq返回,所以它必须评估元素来决定。nil
这就是为什么rest比 更懒的原因next,因为(next s)只是(seq (rest s))。