以下示例产生相同的输出。
(seq [1 2 3 4])
=> (1 2 3 4)
(sequence [1 2 3 4])
=> (1 2 3 4)
最佳答案
不同之处在于,即使集合为空(在这种情况下为空列表),sequence
始终返回一个 seq,而 seq
返回 nil
用于空集合。此外,sequence
可以与 transducers 一起使用.
查看源代码:
user=> (source sequence)
(defn sequence
"Coerces coll to a (possibly empty) sequence, if it is not already
one. Will not force a lazy seq. (sequence nil) yields (), ..."
([coll]
(if (seq? coll) coll
(or (seq coll) ())))
...
因此调用 sequence
只有一个集合调用 seq
如果它还不是一个 seq,如果集合是 nil 则返回一个空列表
。
关于clojure - Clojure 中的 seq 和 sequence 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38876163/