由 petterik 发布的评论
摘要
我认为调查是否存在具有相同效果的较小补丁是值得的。我会看看我能做什么!
目标
由于已经对问题进行了故障排除,尝试最小化补丁大小。
问题
some
需要在reduce
中实现reduced
才能中止减少过程。clojure.core中存在两个reduce实现reduce
和reduce1
,其中reduce
实现在其中,而reduce1
没有。根据some
、reduce1
和/或reduce
的组合定位,使some
可以访问实现reduced
的reduce函数。
尝试使用`(declare reduce)`声明reduce
,但没有效果(将再次验证该方法)。
旧方法
由于some
在位置上位于reduce
之上,因此无法访问,因此重点关注将reduce1
实现为reduced
。这需要移动一些变量引用、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的小补丁。