问题标签 [prolog-toplevel]

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.

0 投票
2 回答
565 浏览

error-handling - Prolog - 我如何捕捉不正确的错误?

不知道这个问题的措辞是否正确,我很抱歉。基本上我想做的是在 Prolog 中创建某种错误处理。例如:

现在,如果用户要查询:

我如何通知用户他们犯了错误?并返回一条消息:

0 投票
1 回答
6342 浏览

prolog - 如何关闭 Prolog 中的“真”和“假”输出?

我想使用 Prolog 编写一个基于文本的小型冒险游戏(这可能是一个愚蠢的想法,但我不是在这里讨论这个问题)。

唯一的问题是,如果没有“true”和“false”值出现,我无法在屏幕上打印文本。

例如,如果我尝试类似:

take一个地方谓词和desk我作为输出得到的名称在哪里:

我怎样才能摆脱这种“真”或“假”输出?

顺便提一下,我还尝试使用format/1一个位置谓词来进行简单的文本输出以及format/2两个位置谓词(当我想输出变量的名称时),但它给出了完全相同的问题。

我也看到了这个答案,但首先它不够详细(至少对于像我这样的人来说不是),其次,我希望内心深处有一种更简单的方法来做到这一点。

最后,我正在使用 SWI-Prolog。

谢谢你。

0 投票
1 回答
472 浏览

prolog - Prolog,在终端中得到正确答案,但在运行程序时得到错误答案

在终端中键入“prolog”会得到:

打字:

获取:

然后按回车得到:

打字:

得到:

当我写一个文件时;test.pl 由以下内容组成:

然后在终端中写入:

我得到:

这里的答案应该是否定的?我究竟做错了什么。另外,您将如何在 prolog 中执行此操作:

即,我想向 prolog 顶层发送查询,并得到答案

0 投票
1 回答
126 浏览

prolog - 不明白 Prolog 结果

我是 Prolog 的新手。我有这个代码:

我询问jealous(vincent,W)。但是 SWI-Prolog 给了我W = vincent!不应该W = marsellus吗?

0 投票
1 回答
220 浏览

prolog - 为什么我的 replace/2 程序总是返回 false?

我的目标是'_'用给定列表中的逻辑变量替换 。我的代码:

它将返回一个正确的列表,但总是以false. 请问有什么帮助吗?

0 投票
1 回答
635 浏览

prolog - swi-prolog forall function doesn't work

I have predicate

and two of results for find('Rogue').. After all, the predicate prints only 1 of them. However, when i copypaste forall(..) to console, it gives me all 2 results. Why?

0 投票
1 回答
4339 浏览

prolog - 自反传递闭包的定义

许多谓词本质上使用某种形式的传递闭包,只是发现也必须解决终止问题。为什么不使用以下方法一劳永逸地解决这个问题closure0/3

是否存在此定义不能用于实现传递闭包的情况?


为什么要区分 / 2?

详细回答@WouterBeek 的评论:dif/2或者iso_dif/2是理想的,因为它们能够显示或发出潜在问题的信号。然而,在当前的实现中,顶层循环通常隐藏了实际问题。考虑一下这个目标closure0(\_^_^true,a,b),它本身肯定是有问题的。使用以下系统时,实际问题直接不可见。

两个顶级循环都没有显示我们真正想看到的:悬空约束。在 SICStus 中,我们需要一个伪变量来产生一些替换,在 SWI 中,查询必须用call_residue_vars/2. 以这种方式,现在显示了所有附加了约束的变量。

0 投票
1 回答
1312 浏览

prolog - prolog SWI 中的未定义过程错误

首次在 Windows 8 上运行 prolog SWI 。

这是我的程序(.pl)文件,非常基本,只有 3 个事实:(我是一个完整的 prolog 初学者)

当我在 prolog-SWI 中加载(咨询)它并使用该程序时,我的输出中出现此错误:

现在,如果这是一个简单的错误,因为c程序中从未将其声明为事实,那很好,但是在查看了在线示例以及我在这些示例中的 Prolog 类中找到的示例后,yes当事实存在于程序中时,我会回复,no当它不是时。如果是,我的回复true,如果不是,则给我很长的错误。

例如,请参阅此链接

哪里有no雾的回复。

0 投票
1 回答
1279 浏览

prolog - 如何获取用户输入序言并存储它

我试图让用户输入他们的生日,这样我就可以告诉他们他们的星座。但是,我无法获得他们的实际生日和月份。有人可以帮我吗?我尝试将读取分成不同的函子,但我不断收到错误。合并两个读取时出现的错误是“语法错误:运算符优先级冲突”。当我分开两个读取时得到的错误是“错误:=:=/2:参数没有充分实例化。”

当我结合阅读时的代码:

当我分开读取时的代码:

0 投票
1 回答
1448 浏览

list - Prolog 列表未在控制台上打印所有元素

我正在使用 SWI-PROLOG 版本 6.6.6

我想打印特定谓词类型的所有属性。

我有一个名为 law 的谓词,数量为 2。

一些事实是

等等

现在我想通过输入法律类型来访问它。如,

这完美地工作。现在,我也想让用户知道所有类型的法律都有哪些,以便用户可以输入它作为查询来获取相应的法律。前任power(money).

为此,我进行了查询以获取所有这些关键字并将它们添加到列表并显示列表。但最终打印出来的清单并不完整。

我使用此代码来获取列表。但是控制台上的输出是

但是,即使在盗版重罪之后,还有更多的法律类型,它们并没有被打印到控制台上。我如何让它们打印出来?