Сетоф: Есть ли способ пораньше остановиться?

Я хочу найти минимальное количество ошибок для множества расписаний. Я составляю расписание, беру его ошибки, сохраняю все ошибки в списке и беру первый элемент (MinError). MinError> = 0, поэтому мне интересно, могу ли я остановить этот процесс, когда случайное расписание получает Errors = 0 и возвращает MinError.

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


person Vasilis Iak    schedule 05.05.2020    source источник


Ответы (1)


Вы можете использовать if-then-else с сокращением, чтобы прекратить обработку дальнейших решений, когда вы найдете свои минимумы:

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