当使用 some-fn 和 3 个谓词时,其递归评估顺序不同,some-fn 的短路行为也不同
使用 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-arity 的行为符合这一点。
可能的解决方案
我认为这需要修正文档字符串,将 "第一个参数" 替换为 "一个参数"。为了使短路行为一致,修补可能是一个破坏性改变,因为可能会返回可能不同的逻辑真值。
此外,此文档字符串行与 "every-pred" 相同,"every-pred" 在其 3 个谓词阶数与 2 个和更多阶数之间具有相同的不同评估顺序和短路行为。与 "every-pred" 的这种影响的较小是因为 every-pred 只返回布尔真或假,而 "some-fn" 返回逻辑真值。