我将尝试在Prolog CLPFD中实现高效的异或(XOR)操作。这个谓词应该很简单,就像这样: xor(A, B, AxorB). A、B和AxorB都是自然数(包括0),其中AxorB是A xor B的结果。 我的主要问题在于效率。首先,我无法找到任何不将这些数字分解为可进一步处...
我想知道与其他程序员(以及在多个项目之间)共享Prolog代码/库的最佳实践是什么。 我自己使用SWI-Prolog,但也对其他Prolog如何处理此问题感兴趣。与Java的Maven+JARs、Python的EasyInstall+PythonEggs相比,其他语言可能也有很多类似的解决方案...
我的SWI-Prolog知识库包含以下两个事实:f(a,b). f(a,c). 现在,如果我提出以下查询:?- f(a,c). true. 但是。?- f(a,b). true ; false. 为什么f(a,b)既为真又为假?当知识库里有三个事实时也会发生这种情况。如果我将f(a,d)添加到...
我希望在SWI-prolog控制台内使用键盘快捷键或命令(我猜在Prolog中称之为“predicate”)清除屏幕。 这里 是类似的问题,我在其中找到了适合我的谓词: write('\33\[2J'). 有没有更好(更简单)的清屏方式?
我正在编写一个 Prolog 查询的部分求值器。我尝试使用 expand_goal/2 来扩展查询,但这种情况下它只是将 Input 与 Output 统一起来: :- initialization(main). main :- Input=is_between(1,A,3),exp...
我在某处读到,你可以将Prolog中的模块视为对象。我正在试图理解它,并确定它是否是一种好的编程方式。如果我有两个文件,一个定义了一个类别dog,然后另一个文件使用这个类别来创建两个dog对象。:- module(dog, [ create_dog/4,bark/1 ]). cr...
这是一个由已删除的回答引发的问题,与这个问题有关。问题可以总结如下: 是否可能在折叠列表时,在折叠过程中生成列表的尾部? 我想表达的是这样的。假设我想计算阶乘(这只是一个愚蠢的例子,仅用于演示),并决定这样做: fac_a(N, F) :- must_be(nonne...
我正在尝试使用 SWI-Prolog 中的 call_with_depth_limit/3 来实现迭代加深,但我不确定它的工作原理或者其行为不正常。我有一个例子,其中发生了以下情况: ?- call_with_depth_limit(mygoal, 29, Result). Result =...
如何使用SWI-Prolog语义Web库查询OWL/RDF文件并提取信息? OWL/RDF文件包含所有Debian软件包的信息,因此我需要进行查询以查找软件包依赖关系。 例如: OWL文件的结构如下:package: A Depends: package: B pacakge: C...
我希望看到(SWI)Prolog被推广为一个重要的NoSQL竞争对手。 (SWI)Prolog具有出色的数据绑定功能,拥有处理大数据的强大能力。最近,PLGI贡献使编写复杂的Gnome GUI变得非常容易... NoSQL同行们最期望的功能是什么?RDF的反应式CRUD听起来如何? 我已经...