ton*_*o.j 2 functional-programming clojure
我正在阅读关于休息与下一个 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
Run Code Online (Sandbox Code Playgroud)
如果rest需要评估一个元素,你会看到"嗨!" 打完电话后打印出来(rest test-seq).显然,rest不需要做评估才能工作.
原因是rest不返回()或(2)或类似的东西; 它每次调用时都会返回一个未评估的延迟序列,并且只有在稍后评估该序列时才会回答是否有任何要返回的问题.
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |