Ert*_*tin 5 lisp functional-programming clojure clojurescript
以下示例产生相同的输出。
(seq [1 2 3 4])
=> (1 2 3 4)
(sequence [1 2 3 4])
=> (1 2 3 4)
Run Code Online (Sandbox Code Playgroud)
不同之处在于,sequence即使集合为空(在这种情况下为空列表),也始终返回 seq,而为空集合seq返回nil。此外,sequence可与换能器一起使用。
查看源代码:
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) ())))
...
Run Code Online (Sandbox Code Playgroud)
因此sequence,seq如果集合还不是 seq,则仅使用集合调用该集合,如果该集合是nil.