问题标签 [b-prolog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
126 浏览

prolog - 解决方法 ensure_loaded/1 B-Prolog?

是否有一种解决方法可以使 ensure_loaded/1 在 B-Prolog 中像在许多其他 Prolog 系统中一样工作?目标是有一个序言,以便其余代码可以使用 ensure_loaded/1 而与我使用的 Prolog 系统无关。

  • 似乎它不像许多 Prolog 系统那样解析当前查询文件的相对路径。
  • 似乎它不允许 Prolog 文本,但需要一些字节码,这将迫使我编译东西。

所以我尝试了以下方法:

但是,当咨询带有以下指令的 Prolog 文本时,我将无法工作:

它仍然没有找到suite.p。

我能做什么?

再见

0 投票
1 回答
163 浏览

performance - BProlog 8.1 中的表格性能不均衡

8.1 版的表格功能做了一些实验,对 我观察到的性能感到非常惊讶。

这是我使用的代码。它计算将某个正整数减少到所需的Collat​​z步数:NI1

I0要确定从到的所有整数所需的最大归约步骤数I

当我在没有和使用表格的情况下运行一些查询?- time(i0_i_maxSteps0_maxSteps(1,1000000,0,MaxSteps)).时,我观察到以下运行时(以秒为单位):

  • 不带表格:6.784
  • 2.323、19.78、3.089、3.084、3.081 _ _ _ _

通过添加:- table posInt_CollatzSteps/2.查询,速度提高了 2 倍。尽管如此,我还是很困惑:

  • 第二次运行比第一次慢 5 倍以上。显然大部分时间都花在了 GC 上。从第 3 次运行开始,制表变体再次变快。
  • 热运行(第 3 次、第 4 次、...)明显慢于冷运行(第 1 次)。

我没想到会这样!将此与我在版本 3.6.0 中观察到的运行时进行对比:

  • 不带表格:14.287
  • :1.829、0.31、0.308、0.31、0.333 _ _ _ _

我能做些什么?是否有任何指令或标志可以帮助我使用 BProlog 获得更好的性能?我在 Linux 上使用 BProlog 版本 8.1 64 位版本。

0 投票
2 回答
290 浏览

list - 使用约束按字典顺序排列两个变量列表

我正在尝试使用其 CLP(FD) 在 BProlog 中实现字典排序约束。

据我从手册中可以看出,BProlog 没有提供内置lexLeq约束(尽管此全局约束存在有效的传播算法),所以我尝试编写自己的并将排序表示为以下集合二元约束:

为了表达(A1 #/\ A2 #/\ ... #/\ AN) => AN+1我认为我应该能够具体化Ais 的约束,所以:

然后我收集Bs 并检查连接是否有效,我只需这样做:

这个想法导致了以下(可能非常丑陋)的代码:

部分有效:

如您所见,产生的所有解决方案都满足约束。问题是并非所有有效的解决方案都产生了。似乎我所描述的约束也以某种方式暗示了这一点X1 #>= X2 #>= ... #>= XN或类似的东西,因此所有变量都是0or 1,而上面的查询也应该返回类似[0,1,0]vs[0,1,0][0,0,0]vs的解决方案[0,1,0]

那么,我的推理有问题还是上述定义中有错误?