clojure - Clojure 中的 seq 和 sequence 有什么区别?

标签 clojure functional-programming lisp clojurescript

以下示例产生相同的输出。

(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/

相关文章:

performance - 提高 Clojure 中点云边界框计算的性能

javascript - 当需要输入来构建管道时,如何编写函数?

lisp - Lisp 中的接口(interface)

ruby - 执行此操作的功能方法是什么? (打破两个嵌套的#each block )

lisp - 以下使用 gensym 的 Common Lisp 宏有什么问题?

lisp - elisp:数字不能大于(expt 2 60)?

java - Windows 上的 Clojure 启动错误 'posix:permissions'

concurrency - 在下面的 Clojure 代码中,alter 可以替换为 Commute 吗?

vector - clojure:将索引添加到 map 向量

c# - 如何使用 Deedle 进行基于行的处理(帧输入和帧输出)