YAP PROLOG超时问题

YAP PROLOG超时问题,prolog,yap,Prolog,Yap,有人能解释一下为什么下面的YAP代码不会导致变量result与timeout统一吗 ?- time_out(sleep(3),1,Result). Result = success. ?- time_out(sleep(3),2,Result). Result = success. ?- time_out(sleep(3),1000,Result). Result = success. ?- time_out(sleep(3),2000,Result). 根据,谓词应按如下方式工作: 超时

有人能解释一下为什么下面的YAP代码不会导致变量
result
timeout
统一吗

?- time_out(sleep(3),1,Result).
Result = success.
?- time_out(sleep(3),2,Result).
Result = success.
 ?- time_out(sleep(3),1000,Result).
Result = success.
 ?- time_out(sleep(3),2000,Result).
根据,谓词应按如下方式工作:

超时(+目标,+超时,-结果)

有时间限制地执行目标
超时
,其中
超时
以毫秒为单位。如果目标 成功,将
结果
成功
统一。如果计时器在 目标终止,将
结果
超时
统一


YAP的文件还指出:

最后,即使计时器以毫秒为单位设置,当前 实施依赖于
报警/3
,因此只能提供 秒级精度

sleep/1
的文档则说明:

将当前线程阻塞
时间

但这种情况下的问题可能与时间无关,而是对
sleep/1
的调用阻塞了执行
timeout/3
调用的当前线程。尽管如此,我还是尝试了带有其他目标的
超时/3
谓词,但也无法获得预期的超时。因此,它可能有一些bug。

(不知何故,我错过了这条线索)

首先,
sleep/1
timeout/3
不会聚集在一起<代码>超时/3
等待一定数量的CPU时间或线程时间,而
睡眠/1
睡眠实时秒。与相比,YAP存在某些限制,请参阅手册了解更多信息

在git的当前开发版本中(上次提交d5ce9a137668fe1ae34e2d47c91fc2725ae04a5f, 日期:Wed Apr 22 14:21:20 2015-0600),机构似乎已损坏

在旧版本的6.3.4中,我得到:

YAP 6.3.4 (x86_64-linux): Tue Jan 29 12:39:29 CET 2013
MYDDAS version MYDDAS-0.9.1
 ?- use_module(library(timeout)).
 % reconsulting /opt/gupu/share/Yap/timeout.yap...
  % reconsulting /opt/gupu/share/Yap/hacks.yap...
  % reconsulted /opt/gupu/share/Yap/hacks.yap in module yap_hacks, 0 msec 15472 bytes
 % reconsulted /opt/gupu/share/Yap/timeout.yap in module timeout, 0 msec 48240 bytes
true.
 ?- 100000000=J,time(time_out((between(1,J,N),N=J),1,R)).
% 0.008 CPU in 0.007 seconds (114% CPU)
J = 100000000,
R = time_out.
 ?- 100000000=J,time(time_out((between(1,J,N),N=J),10000,R)).
% 9.985 CPU in 10.003 seconds ( 99% CPU)
J = 100000000,
R = time_out.
 ?- 100000000=J,time(time_out((between(1,J,N),N=J),100000,R)).
% 23.477 CPU in 23.522 seconds ( 99% CPU)
J = N = 100000000,
R = success.
 ?- 100000000=J,time(time_out(sleep(10),1,R)).
% 0.000 CPU in 10.000 seconds (Inf% CPU)
J = 100000000,
R = success.

哪个版本?有无线程支持编译?没有线程支持的YAP 6.3.3我让YAP开发人员知道了这个线程。我建议你直接联系他,或者在YAP邮件列表上发个帖子。