【发布时间】:2011-08-08 22:33:39
【问题描述】:
我想限制 prolog 中算法的“执行”。你能给我一个提示吗,怎么做?我找到了这个谓词:call_with_time_limit 如何捕获 time_limit_exceeded 异常?谢谢
更新:
我正在尝试这样:
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.
但注意到当我调用 timeout(1) 时发生了:
prolog :-
timeout(1),
但是当我这样做时:
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.
再次调用 timeout(1) 一切正常。 为什么?谢谢 更新 2:
问题解决了,有必要在“参数”前面加上大写...
【问题讨论】:
-
变量以大写字母开头,即t -> T.
-
可以重复但创建于 3 年前。
标签: exception timeout prolog swi-prolog