7得票2回答
使用Prolog CLPFD实现32位数字的异或函数

我将尝试在Prolog CLPFD中实现高效的异或(XOR)操作。这个谓词应该很简单,就像这样: xor(A, B, AxorB). A、B和AxorB都是自然数(包括0),其中AxorB是A xor B的结果。 我的主要问题在于效率。首先,我无法找到任何不将这些数字分解为可进一步处...

12得票2回答
Prolog有包管理器吗?

我想知道与其他程序员(以及在多个项目之间)共享Prolog代码/库的最佳实践是什么。 我自己使用SWI-Prolog,但也对其他Prolog如何处理此问题感兴趣。与Java的Maven+JARs、Python的EasyInstall+PythonEggs相比,其他语言可能也有很多类似的解决方案...

31得票2回答
为什么这个Prolog查询既是真的又是假的?

我的SWI-Prolog知识库包含以下两个事实:f(a,b). f(a,c). 现在,如果我提出以下查询:?- f(a,c). true. 但是。?- f(a,b). true ; false. 为什么f(a,b)既为真又为假?当知识库里有三个事实时也会发生这种情况。如果我将f(a,d)添加到...

7得票4回答
SWI-prolog - 如何使用键盘快捷键或全局谓词清空终端屏幕?

我希望在SWI-prolog控制台内使用键盘快捷键或命令(我猜在Prolog中称之为“predicate”)清除屏幕。 这里 是类似的问题,我在其中找到了适合我的谓词: write('\33\[2J'). 有没有更好(更简单)的清屏方式?

8得票1回答
在SWI-Prolog中实现部分求值

我正在编写一个 Prolog 查询的部分求值器。我尝试使用 expand_goal/2 来扩展查询,但这种情况下它只是将 Input 与 Output 统一起来: :- initialization(main). main :- Input=is_between(1,A,3),exp...

15得票7回答
基于对象的编程在SWI-Prolog中

我在某处读到,你可以将Prolog中的模块视为对象。我正在试图理解它,并确定它是否是一种好的编程方式。如果我有两个文件,一个定义了一个类别dog,然后另一个文件使用这个类别来创建两个dog对象。:- module(dog, [ create_dog/4,bark/1 ]). cr...

9得票3回答
将部分列表折叠

这是一个由已删除的回答引发的问题,与这个问题有关。问题可以总结如下: 是否可能在折叠列表时,在折叠过程中生成列表的尾部? 我想表达的是这样的。假设我想计算阶乘(这只是一个愚蠢的例子,仅用于演示),并决定这样做: fac_a(N, F) :- must_be(nonne...

7得票4回答
如何使用 call_with_depth_limit/3

我正在尝试使用 SWI-Prolog 中的 call_with_depth_limit/3 来实现迭代加深,但我不确定它的工作原理或者其行为不正常。我有一个例子,其中发生了以下情况: ?- call_with_depth_limit(mygoal, 29, Result). Result =...

10得票1回答
如何使用SWI-Prolog的语义网络库查询RDF/OWL?

如何使用SWI-Prolog语义Web库查询OWL/RDF文件并提取信息? OWL/RDF文件包含所有Debian软件包的信息,因此我需要进行查询以查找软件包依赖关系。 例如: OWL文件的结构如下:package: A Depends: package: B pacakge: C...

10得票1回答
作为NoSQL平台,SWI Prolog怎么样?

我希望看到(SWI)Prolog被推广为一个重要的NoSQL竞争对手。 (SWI)Prolog具有出色的数据绑定功能,拥有处理大数据的强大能力。最近,PLGI贡献使编写复杂的Gnome GUI变得非常容易... NoSQL同行们最期望的功能是什么?RDF的反应式CRUD听起来如何? 我已经...