当使用 some-fn 与 3 个谓词一起使用时,其评估顺序不同,并且 some-fn 在使用 2 个谓词、3 个谓词、以及 4 个或更多谓词时的短路方式也不同。
使用 2 个谓词
((some-fn #{42} #{1}) 1 42)
=> 42
使用 3 个谓词
((some-fn #{42} #{1} :third-pred) 1 42)
=> 1
使用 4 个或更多谓词
((some-fn #{42} #{1} :third-pred :fourth+more-pred) 1 42)
=> 42
some-fn 的文档字符串说明:".... 注意:f[由 some-fn 返回的函数] 是短路的,即它会停止执行,当第一个参数触发对原始谓词的逻辑真结果时。"
我理解为只有当前 3 参数的行为符合这一点。
可能的解决方案
我认为这需要对文档字符串进行修改,将“第一个参数”替换为“一个参数”。由于可能返回不同的逻辑真值,这个补丁可能会是一个破坏性更改,导致短路方式的一致性。
此外,这条文档字符串与“every-pred”中的一致,而“every-pred”在其 3 参数与 2 和 4 个以上参数的短路评估顺序和短路行为上具有相同的差异。由于“every-pred”只返回布尔值真或假,而“some-fn”返回逻辑真值,因此这种影响较小。