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