欢迎!请参阅关于页面,了解有关此页面如何工作的更多信息。
讨论:https://groups.google.com/d/topic/clojure-dev/NaAuBz6SpkY/discussion
当我本来会使用 (take-while pred coll) 时会遇到这种情况,但我需要包括对于 (pred item) 为假的第一项。
(take-while pos? [1 2 0 3]) => (1 2) (take-until zero? [1 2 0 3]) => (1 2 0)
补丁: clj-1451.patch
评论来自:alexmiller
欢迎修改补丁(附带测试)。
评论来自:ataggart
包含 take-until 和 drop-until 的实现和测试,每个补丁一个。
评论来自:wagjo
请将 :added 元数据更改为 "1.7"。
更新为 :added "1.7"。
评论者:jbm
我想提出{{take-through}}和{{drop-through}}作为备选名称。我认为“through”更能清晰地表达它们与{{take-while}}和{{drop-while}}的区别。
评论者:jafingerhut
由于今天早些时候的一些更改,2014年6月20日的补丁CLJ-1451-drop-until.patch和CLJ-1451-take-until.patch不再与最新的Clojure master干净地应用。我没检查它们是否直观更新,但猜测它们可能仅仅需要更新几下diff上下文。
有关如何更新补丁的建议,请参阅http://dev.clojure.org/display/community/Developing Patches中“更新过时的补丁”部分。
评论者:gshayban
最好也涵盖transducer的情况。
评论者:michaelblume
已重新滚动补丁
已涵盖transducer的情况
实际上我也喜欢take/drop-through
迈克尔,在变换器中不需要使用volatile或state,例如用take-while。只需用'reduced to terminate'来包装。
a) 你在take-until方面显然是对的。
b) 说实话,我不知道我之前对take-until的实现是怎么想的,我要找个理由说是因为没睡好。
c) 我不明白如何在没有volatile的情况下使drop-until工作。
我和加迪讨论了这个问题,但我们找不到drop-until的用例。有什么吗?
这是一个新的take-until补丁,包括生成测试。
开放性问题
take-until这个名字好吗?我最担心的是,take-until听起来像是take的微小修改,但这个函数实际上反转了与take相关的谓词的意义。
迈克尔,虽然JIRA可以处理具有相同名称的多个附件,但是确定哪个具有相同名称的附件被使用可能会很令人混淆。您能否删除或重命名一份同名附件?有关删除补丁的说明,请参阅此维基页面上的“删除补丁”部分:http://dev.clojure.org/display/community/Developing Patches
补丁略有陈旧,所以我更新到master以适应,但它们几乎是相同的。保留了归属。
标记为预筛选。