我想定义一个谓词,它以相应输入的谓词(它们可以作为调用的惰性序列给出)作为输入,在并行运行它们并计算结果的逻辑或,以便谓词调用在返回
作为最后的备注,我认为像
true
时整个计算也终止(返回true
)。除了提供时间优化外,这还有助于避免某些情况下的非终止(一些谓词调用可能不会终止)。实际上,将非终止解释为第三个undefined
值,该谓词模拟了Kleene's K3 logic(在最初的Kleene代数中的连接)中的或操作。Haskell系列中的这里也介绍了类似的内容。是否有任何(最好是简单的)方法在Clojure中实现此功能?编辑:我决定在阅读评论后添加一些澄清。(a)首先,线程池用尽后发生的情况不太重要。我认为创建一个足够满足我们需要的线程池是一个合理的惯例。(b)最关键的要求是谓词调用开始并行运行,并且一旦谓词调用返回true
,所有正在运行的其他线程都会被中断。预期的行为是:(1)如果有一个返回true
的谓词调用:并行或者返回true
;(2)否则,如果有一个谓词调用没有终止:并行或者不会终止;(3)否则:并行或者返回false
。换句话说,它的行为像由false
<undefined
<true
给出的3元格中的连接,其中undefined
表示非终止。(c)并行或应该能够以许多谓词和许多谓词输入作为输入。但是,如果它以惰性序列作为输入,则会更好。然后,将并行或命名为pany
(表示“parallel any”),我们可以使用以下调用:作为最后的备注,我认为像
pany
、双重pall
或构建这种早期终止并行规约的机制,应该易于实现甚至内置在像Clojure这样面向并行性的语言中。