【问题标题】:Why is take-while returning empty sequence?为什么 take-while 返回空序列?
【发布时间】:2021-11-04 21:18:21
【问题描述】:

以下行为背后的规则是什么:

user=> (take-while #(> 10 %) [2 9 4 12 3 99])
(2 9 4)
user=> (take-while #(> % 10) [2 9 4 12 3 99])
()

谢谢!

【问题讨论】:

标签: clojure


【解决方案1】:

“10 比这个数字大吗?”之间有很大的区别?和“这个数字是否大于 10?”。它们分别是您编写的两个谓词,因此take-while 在给定每个谓词时的行为当然不同。

【讨论】:

  • 为什么第二次调用没有返回 (12 99)?
  • 为什么要这样? take-while 不是 filter
【解决方案2】:

因为 take-while 在第一个 false 处停止

(暂时 #(> % 10) [2 9 4 12 3 99])

所以第一次检查是假的,然后它会停止并给你一个空列表。 https://clojuredocs.org/clojure.core/take-while 中并没有明确说明这一点 但它暗示 例如采取

(暂时 #(> % 10) [ 11 15 2 9 4 12 3 99])

会输出

(11 15)

【讨论】:

    猜你喜欢
    • 2019-11-06
    • 2017-01-20
    • 2011-12-14
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 2023-01-05
    相关资源
    最近更新 更多