同一个Linux命令在一个环境中成功,而在另一个环境中失败:
library(microbenchmark)
df <- data.frame(X1 = 1:5, X2 = 6:10, X3 = c(6, 2, 3, 0, 2))
f1 <- function(df) apply(df[1:3], 1, FUN = anyDuplicated)>0
f2 <- function(df) Reduce(`|`, lapply(df[1:2], `==`, df[,3]))
f3 <- function(df) with(df, X3==X1 | X3==X2)
all(f1(df)==f2(df))
#[1] TRUE
all(f1(df)==f3(df))
#[1] TRUE
res <- microbenchmark(f1(df), f2(df), f3(df))
print(res, order="mean")
# Unit: microseconds
# expr min lq mean median uq max neval
# f3(df) 14.115 15.3980 17.57113 17.537 17.965 40.634 100
# f2(df) 79.130 80.8405 86.41780 85.118 88.325 124.468 100
# f1(df) 223.273 225.6255 235.95907 228.619 238.243 497.445 100
我遇到的失败是在Debian stretch和Coq v8.5
之下$ coqtop -lv test.v -I Lib
我收到的错误信息是:
$ uname -a
Linux front 4.8.0-1-amd64 #1 SMP Debian 4.8.7-1 (2016-11-13) x86_64 GNU/Linux
$ coqtop -v
The Coq Proof Assistant, version 8.5 (June 2016)
compiled on Jun 9 2016 12:4:46 with OCaml 4.02.3
与同一来源相关的同一命令成功的环境是:
Welcome to Coq 8.5 (June 2016)
Require Import libtest.
Error during initialization:
File "/home/user/dev/coq/test.v", line 1, characters 15-22:
Error: Unable to locate library libtest.
成功的结果如下:
$ uname -a
Linux back 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19)x86_64 GNU/...
$ coqtop
The Coq Proof Assistant, version 8.4pl4 (July 2014)
compiled on Jul 27 2014 13:34:24 with OCaml 4.01.0
所以我想弄清楚发生了什么,希望得到答案 this post但无济于事。
为了这个问题,我将源代码简化为最简单的:
test.v
Welcome to Coq 8.4pl4 (July 2014)
Require Import libtest.
Coq <
LIB / libtest.v
Require Import libtest.
如果这很重要,我已经在每个环境中重新编译了(空)库文件<empty file>
。
libtest.v
感谢任何帮助。
答案 0 :(得分:5)
实际上,-I
的行为在8.4到8.5之间变化。在Coq的更改日志中,我们可以找到an interesting line。正如更改日志中所示,并且other answer建议您使用-R
。
答案 1 :(得分:4)
以下适用于我(我使用Coq 8.5pl3)。
让我们编译我们的库,将它放在Lib
命名空间中:
$ pwd
<...>/libtest-question
$ cd Lib
$ coqc -R . "Lib" libtest.v
$ cd ..
然后让我们修改我们的test.v
:
$ cat test.v
Require Import Lib.libtest.
并加载
$ coqtop -R Lib Lib -l test.v
-Q
开关也可以使用,有关更多详细信息,请参阅参考手册&#39; §14.3.3。