为什么Clojure的take-while函数会返回空序列?
Clojure take-while 行为原因说明
take-while 的核心执行规则为:从序列的第一个元素开始逐项遍历,每一项都传入你提供的断言函数判断,只要断言返回真值就保留当前项,一旦遇到第一个断言返回假值的项,立刻停止遍历,返回之前保留的所有项组成的序列。
两个调用返回结果不同,本质是你传入的大于判断参数顺序相反,对应断言的判断逻辑完全不一样:
- 第一个调用
(take-while #(> 10 %) [2 9 4 12 3 99])
匿名函数#(> 10 %)等价于判断10 > 当前元素,也就是找小于10的元素:- 2:10>2 为真,保留
- 9:10>9 为真,保留
- 4:10>4 为真,保留
- 12:10>12 为假,停止遍历,最终返回
(2 9 4)
- 第二个调用
(take-while #(> % 10) [2 9 4 12 3 99])
匿名函数#(> % 10)等价于判断当前元素 > 10,也就是找大于10的元素:- 遍历的第一个元素是2,2>10 直接返回假值,还没收集到任何元素就停止了遍历,所以最终返回空序列
()。
- 遍历的第一个元素是2,2>10 直接返回假值,还没收集到任何元素就停止了遍历,所以最终返回空序列
内容的提问来源于stack exchange,提问作者dag
相关产品推荐
相关产品推荐

