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. 爲什麼orderby過濾器不工作?
- 3. 爲什麼我dataveiw過濾器崩潰
- 4. 爲什麼過濾器不工作?
- 5. 爲什麼'git status'運行過濾器?
- 6. 爲什麼標籤意圖過濾器?
- 7. 爲什麼Haskell過濾器會終止?
- 8. 什麼是源過濾器?
- 9. 需要什麼卡爾曼濾波器
- 10. 過濾器在雞方案中解除限制。爲什麼?
- 11. 爲什麼不允許在投影中放置過濾器
- 12. 爲什麼在Spring中使用Url重寫過濾器?
- 13. 爲什麼值列表在Django中保留過濾器?
- 14. 爲什麼過濾器不能在角js中工作?
- 15. 爲什麼在grails中沒有過濾攔截器?
- 16. 爲什麼我在GraphEdit&GraphStudio中看到不同的過濾器
- 17. 斯卡拉流過濾器行爲
- 18. 爲什麼日期值「滑過」Excel中的過濾器?
- 19. 爲什麼過濾功能存在?
- 20. 爲什麼$匹配返回項目,但過濾器正在過濾它
- 21. 卡爾曼過濾器android
- 22. 過濾器(| x |)和過濾器(|&x |)之間有什麼區別?
- 23. 爲什麼使用laravel路徑過濾器可以在控制器中實現過濾器的結果?
- 24. Matlab卡爾曼濾波器代碼 - 爲什麼不工作?
- 25. IE5.5過濾器 - 爲什麼過濾器:漸變(屬性)不可用,而過濾器:alpha(屬性)是?
- 26. 服務中爲什麼不聲明意圖過濾器?
- 27. 爲什麼the_title()過濾器也應用於菜單標題中?
- 28. 爲什麼我們需要android中的intent過濾器?
- 29. 爲什麼conv_filter_visualization示例中的過濾器是128x128?
- 30. 爲什麼.mxml是IntelliJ Idea中的默認文件過濾器?
我問爲什麼有限效果不會打印出來。僅僅因爲它的長度小於* 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