问题标签 [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.
prolog - 解决方法 ensure_loaded/1 B-Prolog?
是否有一种解决方法可以使 ensure_loaded/1 在 B-Prolog 中像在许多其他 Prolog 系统中一样工作?目标是有一个序言,以便其余代码可以使用 ensure_loaded/1 而与我使用的 Prolog 系统无关。
- 似乎它不像许多 Prolog 系统那样解析当前查询文件的相对路径。
- 似乎它不允许 Prolog 文本,但需要一些字节码,这将迫使我编译东西。
所以我尝试了以下方法:
但是,当咨询带有以下指令的 Prolog 文本时,我将无法工作:
它仍然没有找到suite.p。
我能做什么?
再见
performance - BProlog 8.1 中的表格性能不均衡
我用b-prolog 8.1 版的表格功能做了一些实验,对 我观察到的性能感到非常惊讶。
这是我使用的代码。它计算将某个正整数减少到所需的Collatz步数:N
I
1
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 次)。
我没想到会这样!将此与我在xsb版本 3.6.0 中观察到的运行时进行对比:
- 不带表格:14.287
- 带表:1.829、0.31、0.308、0.31、0.333 _ _ _ _
我能做些什么?是否有任何指令或标志可以帮助我使用 BProlog 获得更好的性能?我在 Linux 上使用 BProlog 版本 8.1 64 位版本。
list - 使用约束按字典顺序排列两个变量列表
我正在尝试使用其 CLP(FD) 在 BProlog 中实现字典排序约束。
据我从手册中可以看出,BProlog 没有提供内置lexLeq
约束(尽管此全局约束存在有效的传播算法),所以我尝试编写自己的并将排序表示为以下集合二元约束:
为了表达(A1 #/\ A2 #/\ ... #/\ AN) => AN+1
我认为我应该能够具体化Ai
s 的约束,所以:
然后我收集B
s 并检查连接是否有效,我只需这样做:
这个想法导致了以下(可能非常丑陋)的代码:
这部分有效:
如您所见,产生的所有解决方案都满足约束。问题是并非所有有效的解决方案都产生了。似乎我所描述的约束也以某种方式暗示了这一点X1 #>= X2 #>= ... #>= XN
或类似的东西,因此所有变量都是0
or 1
,而上面的查询也应该返回类似[0,1,0]
vs[0,1,0]
或[0,0,0]
vs的解决方案[0,1,0]
。
那么,我的推理有问题还是上述定义中有错误?