0
A
回答
3
因为您正在尝试评估无限序列(通过将其打印到REPL)。
例如, (filter #(> % 100) (iterate #(+ % 17) 0))
可以打印到REPL,因为REPL将打印结果序列的第一个x
元素,然后是...
,其中x
是可以使用(set! *print-length* x)
设置的值。
但试图评估(filter #(< % 100) (iterate #(+ % 17) 0))
将永远运行,因为只有6个可能的元素。
看一看的*print-length*
文档:
;; Oops! Don't this!!!
user=> (iterate inc 0)
;; Frantically doing C-c C-c :-P
; Evaluation aborted.
user=> (set! *print-length* 10)
10
;; Now it's perfectly fine. Yay!
user=> (iterate inc 0)
(0 1 2 3 4 5 6 7 8 9 ...)
您可能需要使用take-while
代替filter
,因为你与iterate
创建序列已经订购。
user=> (take-while #(< % 100) (iterate #(+ % 17) 0))
(0 17 34 51 68 85)
0
如上面的表达式所示响应打印的序列不是完整的结果(检查序列末尾的...),这表明nrepl在返回序列的响应时take
特定数量的项目来自序列并用...打印它们以表示序列中还有更多。在最后一种情况下,“小于100的数字”不会产生nrepl打印所需的最少数量的项目,因此nrepl会继续等待序列中的更多项目(这是迭代的无限序列)
0
有3只在您的序列号是小于100。然而,既然是“无限的”,filter
必须看元素的“无限”号来确定第四元素不存在。
因为你的榜样iterate
结构产生递增序列,可以使用take-while
如果你要的结果限制为小于100的元素例如:
(take-while #(< % 100) (iterate #(+ % 17) 0))
相关问题
- 1. 为什么要使用jQuery过滤器?
- 2. 为什么标签意图过滤器?
- 3. 为什么'git status'运行过滤器?
- 4. 为什么我dataveiw过滤器崩溃
- 5. 为什么过滤器不工作?
- 6. 需要什么卡尔曼滤波器
- 7. 斯卡拉流过滤器行为
- 8. 为什么我在GraphEdit&GraphStudio中看到不同的过滤器
- 9. 为什么在grails中没有过滤拦截器?
- 10. 为什么过滤器不能在角js中工作?
- 11. 为什么在Spring中使用Url重写过滤器?
- 12. 过滤器在鸡方案中解除限制。为什么?
- 13. 为什么不允许在投影中放置过滤器
- 14. 为什么值列表在Django中保留过滤器?
- 15. 为什么日期值“滑过”Excel中的过滤器?
- 16. 为什么过滤功能存在?
- 17. 为什么$匹配返回项目,但过滤器正在过滤它
- 18. 卡尔曼过滤器android
- 19. Matlab卡尔曼滤波器代码 - 为什么不工作?
- 20. IE5.5过滤器 - 为什么过滤器:渐变(属性)不可用,而过滤器:alpha(属性)是?
- 21. 为什么在设置CIAdditionCompositing过滤器时看到NSUnknownKeyException?
- 22. 为什么CIGloom Core Image过滤器不能在iOS上使用?
- 23. 服务中为什么不声明意图过滤器?
- 24. 为什么.mxml是IntelliJ Idea中的默认文件过滤器?
- 25. 为什么我们需要android中的intent过滤器?
- 26. 为什么我不能为我的地图使用过滤器?
- 27. 为什么我的光标跳进emacs nrepl
- 28. doFilter在java的过滤器中的doFilter方法中做什么?
- 29. 什么是泽西岛过滤器?
- 30. 什么是真正的过滤器流?
我问为什么有限效果不会打印出来。仅仅因为它的长度小于* print-length *?这是不是很奇怪? – yehe 2013-04-10 07:14:30
这里没有有限的序列,迭代是无限的,无限序列上运行的滤波器会导致无限序列。 – Ankur 2013-04-10 07:16:31
*仅仅因为它的长度小于打印长度* * REPL只是试图获得第一个'x'元素。没有办法知道REPL需要多少时间来获取这些元素,或者根本没有可能。另外,你的序列不是有限的。 – sloth 2013-04-10 07:17:07