Setof:有提前停止的方法吗?

Setof: Is there a way for early stopping?

我想找出很多计划的最小错误数。我制定了一个计划,接受它的错误,将所有错误存储在一个列表中并获取第一个元素(MinError)。 MinError >=0,所以我想知道当随机调度得到 Errors=0 和 return MinError 时我是否可以停止这个过程。

setof(Errors,A^B^C^(schedule(A,B,C),schedule_errors(A,B,C,Errors)),[MinError|_]).

您可以使用带有切割的 if-then-else 来在找到最小值时停止处理进一步的解决方案:

setof(Errors, 
      A^B^C^(
             schedule(A,B,C),
             schedule_errors(A,B,C,Errors),
             (Errors=0 -> ! ; true)
            ), 
      [MinError|_]).