exception timeout prolog swi-prolog

exception - Excepción de catch timeout en Prolog



swi-prolog (2)

Use catch/3 . Ejemplo:

catch(call_with_time_limit(1, sleep(5)), time_limit_exceeded, writeln(''overslept!'')).

Más practicamente:

catch(call_with_time_limit(T, heavy_computation(X)), time_limit_exceeded, X = no_answer). % or just fail

Quiero limitar la "ejecución" de algoritmo en prolog. ¿Me puede dar una pista, cómo hacerlo? He encontrado este predicado: call_with_time_limit ¿Cómo puedo capturar la excepción time_limit_exceeded? Gracias

ACTUALIZAR:

Lo intento de esta manera:

timeout(t) :- catch(call_with_time_limit(t, sleep(5)), X, error_process(X)). error_process(time_limit_exceeded) :- write(''Timeout exceeded''), nl, halt. error_process(X) :- write(''Unknown Error'' : X), nl, halt.

pero observando sucedió cuando llamo a tiempo de espera (1):

prolog :- timeout(1),

pero cuando lo hago de esta manera:

runStart :- call_with_time_limit(1, sleep(5)). timeout(1) :- catch(runStart, X, error_process(X)). error_process(time_limit_exceeded) :- write(''Timeout exceeded''), nl, halt. error_process(X) :- write(''Unknown Error'' : X), nl, halt.

y de nuevo call timeout (1) todo está bien. ¿Por qué? Gracias ACTUALIZACIÓN 2:

Problema resuelto, es necesario tener un "argumento" predicho con mayúsculas ...


loop :- loop. loop_for_n_sec(N, Catcher) :- catch( call_with_time_limit(N, loop), Catcher, true ).

Uso:

?- loop_for_n_sec(1, Catcher). Catcher = time_limit_exceeded