Я пишу предикат, который реализует мета-вызов, который накладывает ограничение на время, затрачиваемое на выполнение цели - аналогично time_out/3
, предлагаемому library(timeout)
на SICStus Prolog и SWI -Пролог .
Цели, которые в противном случае были бы навсегда ...
?- repeat, false.
<i>% does not terminate</i>
... могут быть отменены через некоторое время:
?- my_time_out((repeat,false), 1.0, S).
<i>% answer after roughly one second</i>
S = time_out.
ХОРОШО! Но есть одна загвоздка: вызовы my_time_out/3
могут не быть вложенными 1 .
Итак, вот мой вызов:
Какая ошибка следует ли my_time_out/3
поднять с вложенными вариантами использования?
Прямо сейчас, error(resource_error(timer),_)
бросают.
Но есть ли лучшие альтернативы?
Сноски:
1 Это связано с загадочными деталями реализации, но достаточно сказать, что это ограничение почти не имеет отношения к моему целевому приложению. Тем не менее, это "почти" беспокоит меня ...