相关疑难解决方法(0)

用C或C++实现Prolog

我想知道Prolog在C或C++中的实现方式如何.我主要感兴趣的是将它构建为C或C++库,尽管解释器应用程序也可以.我有兴趣阅读它的内部,即查询执行,即查找解决方案和相关的数据类型.如果您向我推荐任何有关主题的阅读材料或任何直接建议/建议,我将很高兴.读数可能适用于其他OOP语言或一般OOP.最耗尽的材料将解决这个问题.

c++ prolog

13
推荐指数
3
解决办法
1万
查看次数

用于执行Prolog的抽象机器的比较

我正在寻找研究论文或任何其他出版物,比较不同的抽象机器(不止一个)执行Prolog与不基于抽象机器的prolog解释器.到目前为止我所看到的是,大多数实现似乎都是基于Warren Abstract Machine的prolog解释器,尽管提出了其他抽象机器(例如维也纳抽象机,面向树的抽象机)并且没有任何一般的比较.我对效率的比较感兴趣(不是特征),尽管所有比较的解释器都应该允许约束逻辑编程.

prolog abstract-machine warren-abstract-machine

9
推荐指数
1
解决办法
352
查看次数

SWI Prolog 使用什么发生检查优化?

引用SICStus Prolog 手册

逻辑编程背后的常用数学理论禁止创建循环项,规定每次变量与项统一时都应进行发生检查。不幸的是,发生检查会非常昂贵,以至于使 Prolog作为一种编程语言变得不切实际

但是,我运行了这些基准测试(Prolog 的基准测试)并发现 SWI Prolog 在打开和关闭发生检查 (OC) 之间存在相当小的差异(小于 20%):

OC 关闭::- set_prolog_flag(occurs_check, false)..swiplrc(重新启动)

?- run_interleaved(10).
% 768,486,984 inferences, 91.483 CPU in 91.483 seconds (100% CPU, 8400298 Lips)
true.

?- run(1).
'Program'            Time     GC
================================
boyer               0.453  0.059
browse              0.395  0.000
chat_parser         0.693  0.000
crypt               0.481  0.000
fast_mu             0.628  0.000
flatten             0.584  0.000
meta_qsort          0.457  0.000
mu                  0.523  0.000
nreverse            0.406  0.000
poly_10 …
Run Code Online (Sandbox Code Playgroud)

prolog swi-prolog occurs-check

6
推荐指数
1
解决办法
347
查看次数

在Warren的抽象机中,如果其中一个参数是寄存器,绑定是如何工作的?

我正在尝试创建自己的WAM实现,我坚持练习2.4

我无法理解如何执行unify_value X4图2.4中的指令.

据我所知,该指令应该从查询中用程序中的f(W)统一Y.

unify_value X4调用unify (X4,S)S = 2(见图2.1),相应的堆单元格为"REF 2",X4为"STR 5".

Unify(图2.7)应该bind是那些值,但我不明白如何deref注册.

"REF 2"在堆中,"STR 5"在寄存器中.你怎么bind去登记册?

prolog unification warren-abstract-machine

5
推荐指数
1
解决办法
240
查看次数