7得票1回答
如何在Prolog中关闭"true"和"false"输出?

我希望能使用Prolog编写一个基于文本的小冒险游戏(可能这很蠢,但我不想在这里讨论这个问题)。唯一的问题是我无法在屏幕上输出文本而不显示“true”和“false”值。 例如,如果我尝试以下内容: take(desk) :- write('This thing is way too he...

7得票2回答
SWI-Prolog中的catch/3和call_with_time_limit/2谓词

我想使用。 catch(:Goal, +Catcher, :Recover) 目标是什么。 call_with_time_limit(+Time, :Goal) 这个问题让人感到困惑,我无法找到正确的方法来确定以下情况: 1) 目标因为超时而停止。 2) 目标失败(有时本来就该...

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

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

7得票4回答
将Prolog集成到其他环境中

我正在使用Prolog进行学术项目。我想知道是否有一种方法使Prolog与其他编程语言交互。我需要的是Prolog问题和答案的简单输入/输出重定向。 我知道在某些Prolog实现中,比如SWI Prolog,Prolog可以调用C函数。 我需要的是一个简单的输入/输出重定向,以便输入Pro...

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

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

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

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

7得票3回答
当启用全局出现检查时,Prolog是否需要垃圾收集?

据我所知,通过声音统一,SLD解析不应创建循环数据结构(这正确吗?) 如果是这样的话,理论上可以以这种方式实现Prolog,而无需垃圾回收(GC)。但是,也可能不需要。 这对基于WAM的Prolog实现是否成立? 这对SWI-Prolog是否成立?(我认为它不是基于WAM的)在全局启用“...