You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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 直接返回假值,还没收集到任何元素就停止了遍历,所以最终返回空序列 ()。

内容的提问来源于stack exchange,提问作者dag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:39:01