|
1
2
好吧,这是一个编译器优化,给定的编译器/版本组合可能有,也可能没有。 SWI的后续版本不存在此问题。可能与 子句索引 。这种行为将在没有索引的实现上出现,或者仅在第一个参数上进行索引。 但显然, "SWI-Prolog provides `just-in-time' indexing over multiple arguments" .SWI 5.6.56手册 states “最多可以索引4个参数”。所以它可能会索引不止一个。 |
|
|
2
0
之所以有重做,是因为prolog无法推断(在不检查的情况下),通过遵循下一个子句,是否会有替代解决方案。的确,在这种情况下,这只是一次头部统一检查(并不是说这总是微不足道的),但它可能需要花费大量时间(甚至永远不会终止)。 现在,这正是你应该使用cut的地方:你知道额外的选择点不会产生解决方案(所以你没有改变语义——绿色切割)。或者(但它主要是覆盖切口的句法糖),你可以使用if-then-else:
并不是说这仍然会进行额外的计算,而这些计算可以通过cut来避免。 附言:我怀疑有人会认为这是家庭作业XD |
|
|
shampoo · 构造无重复但部分输入固定的随机化矩阵 8 年前 |
|
|
Sara Fuerst · 修复正则表达式中的灾难性回溯 8 年前 |
|
|
shibormot · 平衡组未响应的c#regex 10 年前 |
|
|
Batman · 二进制树中给定和的路径-递归|Java 11 年前 |
|
|
Eusebius · 太多的回溯:为什么这里有一个“重做”? 13 年前 |