在Clojure中是一个无限空值序列的空列表?

unj*_*nj2 7 clojure

我学习的概念sequencenilClojure中.这是一个小实验的结果.

1:6 user=> (first '())
nil
1:7 user=> (rest '())
()
1:8 user=> (first (rest '()))
nil
Run Code Online (Sandbox Code Playgroud)

这是否意味着'()实际上是一系列的nils?

Bri*_*per 10

如果要测试集合的"其余"是否为空,请使用next.

user> (next '(foo bar))
(bar)
user> (next '())
nil
user> (doc next)
-------------------------
clojure.core/next
([coll])
  Returns a seq of the items after the first. Calls seq on its
  argument.  If there are no more items, returns nil.
Run Code Online (Sandbox Code Playgroud)

nil去年取消了"nil-punning"(处理空集合/ seq和同样的东西),转而采用完全懒惰的序列.请参阅此处以了解导致此更改的讨论.

  • 我认为通常人们测试(seq obj)而不是`(空?obj)`. (3认同)