评论由:petterik
摘要
我认为调查是否存在具有相同效果的更小幅度的补丁是值得的。我会看看我能做什么!
目标
由于问题已分类,因此尝试最小化补丁大小。
问题
some
需要在 reduce
中实现 reduced
以能够停止减少过程。在 clojure.core 中有两个 reduce 实现,reduce
和 reduce1
,其中 reduce
实现了 reduced
,而 reduce1
没有实现。将some
、reduce1
和/或 reduce
的组合置于 some
可以访问实现 reduced
的 reduce 函数的位置。
尝试通过 (declare reduce)
声明 reduce
并未成功,如我所知(将再次验证该方法)。
旧方法
由于在位置上some
位于reduce
之上,因此不可访问,因此关注将reduce1
实现为reduced
。这需要移动deref、deref-future和其他一些内容,导致一个相当大的补丁。
新方法
通过以下方式最小化补丁大小:
1a. 将some
(和every?
)移动到reduce
之下。
1b. 将some
(和every?
)向下移动,将reduce
向上移动。
1c. 将reduce
移动到some
(和every?
)之上。
2. 创建与reduce
类似的some
和some1
,其中基于reduce
的some
将位于reduce
之下。
3. ?
我不喜欢第2点,因为会创建更多像reduce1
这样的函数副本。我希望我们能通过第1x点获得一个小补丁。