下一个在clojure休息

下一个在clojure休息,clojure,functional-programming,Clojure,Functional Programming,我正在读《clojure》中关于休息和下一步的解释。 据我所知,它分解为next评估/实现序列的尾部, 要知道它是否应该返回nil,而rest总是返回序列,所以它更懒 然而,我不明白的是:这两个函数都需要知道是否存在某些东西 在尾部。一个将返回nil,如果没有剩余内容,另一个将返回() 所以基本上,他们都需要检查/评估剩下的东西。 即使是rest,要返回(),也需要知道它不会返回,例如说(2) 因此,即使是rest也需要进行评估 但解释正好相反。 只有next进行评估,而rest不进行评估,因此

我正在读《clojure》中关于休息和下一步的解释。 据我所知,它分解为
next
评估/实现序列的尾部, 要知道它是否应该返回
nil
,而
rest
总是返回序列,所以它更懒

然而,我不明白的是:这两个函数都需要知道是否存在某些东西 在尾部。一个将返回
nil
,如果没有剩余内容,另一个将返回
()

所以基本上,他们都需要检查/评估剩下的东西。 即使是
rest
,要返回
()
,也需要知道它不会返回,例如说
(2)

因此,即使是
rest
也需要进行评估

但解释正好相反。 只有
next
进行评估,而
rest
不进行评估,因此更懒惰

有人能解释一下吗

user> (def test-seq (lazy-cat [1] [(do (print "Hi!") 2)]))
#'user/test-seq
user> (def rest-test (rest test-seq))
#'user/rest-test
user> (def next-test (next test-seq))
Hi!
#'user/next-test
如果
rest
需要评估一个元素,那么在我调用
(rest test seq)
之后,您会看到“Hi!”被打印出来。显然,
rest
不需要为了工作而进行评估


原因是
rest
不返回()或(2)或类似的内容;每次调用它时,它都会返回一个未计算的惰性序列,并且只有在以后对该序列进行计算时,才会回答是否有任何东西要返回的问题。

我想我已经得到了它。Clojure实际上非常简单。