Обработка ошибок в ограниченном по времени мета-вызове Пролог - PullRequest
0 голосов
/ 17 апреля 2020

Я пишу предикат, который реализует мета-вызов, который накладывает ограничение на время, затрачиваемое на выполнение цели - аналогично 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 Это связано с загадочными деталями реализации, но достаточно сказать, что это ограничение почти не имеет отношения к моему целевому приложению. Тем не менее, это "почти" беспокоит меня ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...