使用some-fn与3个谓词时,其评估顺序不同,且some-fn的短路方式也不同于使用2个谓词时
在使用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"返回逻辑真值,因此此处的副作用较小。