评论由: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。