prolog

如何 - Prolog 中的图形着色

我正在尝试在 Prolog 中制作简单的图形着色算法,但我有点难以理解该语言。我知道我想做什么 - 我想去一个顶点,找到所有其他连接到它的顶点,检查我的顶点的颜色,并根据它用不同的颜色为其他顶点着色。我只是很难将其翻译成 Prolog。如果它是 C 方言或 Java,那对我来说简直是小菜一碟,但这让我很适应。 这是我目前所拥有的: main:- graph_coloring. %color_... »

C# 和 Prolog 集成

当用户在 Windows 8 应用程序中单击“Enter”按钮时,我想执行一个 prolog 文件。我可以执行单独的 prolog 文件还是需要在我的 C# 代码中间编写 prolog 代码。我正在使用 Visual Studio 2013 和 SWI prolog。 我想这样做是因为我正在开发一个应用程序,它将算术方程作为用户输入,使用 prolog 求解它并输出答案。 ... »

c#

SWI-Prolog 中的 catch/3 和 call_with_time_limit/2 谓词

我想用 catch(:Goal, +Catcher, :Recover) 目标在哪里 call_with_time_limit(+Time, :Goal) 搞砸了,我找不到正确的方法来知道何时发生上述情况: 1) 目标因超时而停止。 2) 目标失败(假设有时会失败)。 我试过了: (catch(call_with_time_limit(Time, Goal), Catcher,... »

在 Prolog 中验证两个列表的交集

我正在尝试检查提供的交互是否是两个列表的正确交集。示例查询列表: ?- intersectionL([1,2,3,4],[1,3,5,6],[1,3]). /* expected output: true. */ ?- intersectionL([1,2,3,4],[1,3,5,6],X). /* expected output: X = [1,3]. */ ?- intersection... »

在 Prolog 中读取字符串(从文件中)

我在 Prolog 中编写了一个词法分析器和一个解析器。它将字符串与其 AST 统一起来。这是我正在处理的编译器/解释器项目的一部分。自然,我现在想从文件中读取字符串来解析它。但是,我为此找到的谓词是 read,它只读取 Prolog 原子和谓词,例如带有的文件 hello. 我一直在玩弄 double_quotes 设置,但没有成功。 我希望能够读取这样的文件 let id = \x.... »

Prolog DCG 正在返回一个公式而不是一个值

我正在尝试学习如何使用 DCG,但当我得到的返回值是公式而不是公式的总和时遇到了问题,例如 A = 1+3*20 而不是A = 61. 我做错了什么?我尝试输入dansk(A) --> en2ni(A1), [og], tyve2halvfems(A2), A is A1+A2.,但随后出现错误 ERROR: dansk/3: Undefined procedure: (is)/4 ERR... »

在 SWI-Prolog 中访问和爬取文件系统

如何与 SWI-Prolog 中的文件系统交互? 我想做这样的事情。编写一些匹配文件的谓词(名称,或打开它们并匹配内容)。但是然后使用 Prolog 来驱动这个系统,这样我就可以对整个事情进行查询和推断。 我假设我需要提前获取有关整个文件树的数据。或者我可以在一些递归谓词中通过文件系统动态生成“爬网”。 但我找不到任何示例或教程,而不仅仅是打开、关闭、读取和写入单个文件。... »

Prolog 限制最小化错误。 labeling/2 参数 1 错误

我有一个要在学校开发的应用程序,其中包括为某个主题生成工作组。 我必须满足的限制如下: GPA 相似的学生应该在同一组。 以前一起工作过的学生应该分在不同的小组中。 组大小应有可能的最小和最大大小。 我的谓词目前看起来像这样: groups(Students, GPAs, PreviouslyWorkedTogether, [MinSize,MaxSize],Groups). Stud... »

Prolog - 使用迭代器回溯

我有一个谓词: solve(parts(X), Places) :- "iterate Pl from Places to 0", tryPutPart(X, Pl), fail. 我想在那里强制回溯,因为我想要所有可能的解决方案。(相反,我会在不同的谓词中递归地找到位置 Pl)。 有没有可能以某种方式做到这一点?我的想法是制作一个长度为Places 并看起来像[1... »

Prolog:将 2 个列表与其中 1 个未实例化的列表相乘?

我正在尝试编写一个规则,该规则可以返回两个列表中每个元素的乘积之和(相同长度)。 这是我现在拥有的: sum(0, _, []). sum(Result, [H1|T1], [H2|T2]) :- sum(Remaining,T1, T2), Remaining is Result - (H1*H2). 当列表之一未实例化时,它将不起作用。为了实现以下目标,我需要进行哪... »

DCG中的大括号{}

我开始学习如何使用 DCG。我想知道花括号{...} 是用来做什么的?何时(何时不需要)需要它们?例如: read_lines --> { read_line_to_codes(current_input, Codes) } , ( { Codes == end_of_file } -> [] ; { atom_codes(Line, Codes) } ,... »

Logtalk:运行所有测试套件的最佳方式是什么?

在 Logtalk 代码示例中,每个示例都提供了自己的测试套件,可以在“独立”模式下运行(一次一个测试套件)。 但是,正如标题所说,我对同时测试所有测试套件(在我的应用中继承lgtunit 的所有加载对象)的最佳方法很感兴趣,并且只有一个摘要最后执行的所有测试(总通过/跳过/失败)。 例如,在 SWI-Prolog 中,run_tests/0 运行所有测试单元。... »

如何在 Prolog 中编写键值对?

假设我有以下谓词,它指出 ID loc1 指定一个位置。 isLocation('loc1', 'Location 1'). 我想为第二个文本 (Location 1) 提供翻译,即。 e.键值对,例如en='Location 1', de='Ort 1', ru='Местоположение 1'。 在 Prolog 中编码此类数据的正确方法是什么,尤其是 TuProlog(理想情况下... »

具有递增分量的动态 Prolog 谓词

我有一个由一组规则组成的知识库,当某些条件发生时,每个规则的头部都会执行复杂术语的断言或撤回。 如何确保Id 每次递增 assert(term(Id,A,B,C))? ... »

Prolog 列表表示图遍历

我正在尝试遍历我在 prolog 中构建的图表。该图表示为以下形式的转换列表: next(FromState, ToState, Symbol) 其中 FromState 和 ToState 是图的节点,表示为:state(Number, IrrelevantVariable)。 Symbol 可以采用许多值,但我只对以 epsilon 作为符号的转换感兴趣。给定一组 StartState,我需要... »

用莱布尼茨公式递归计算prolog中的pi

我想学习一些序言,并找到了针对给定谓词 pi(10, Result) 递归计算 pi 的练习。我不希望它是尾递归的,因为我发现尾递归更容易。我一直在尝试这样做几个小时,但似乎我无法找到解决方案,这就是我已经走了多远: (我使用莱布尼茨的圆周率公式作为参考) pi(0, 0). pi(Next, Result) :- Num is -1**(Next + 1), Part ... »

密码算术序言测试失败递归想法

我需要测试这段代码的二 + 二 = 四的加密算法,但它给了我错误,这是错误的。我需要知道为什么会这样。它适用于 donald+robert=gerald 或 it+is=me。我知道递归是如何工作的,但由于我无法调试它,我不知道出了什么问题。 sum(N1,N2,N) :- sum1(N1,N2,N,0,0,[0,1,2,3,4,5,6,7,8,9], _). sum1([], []... »

在 Prolog 中将两个二叉搜索树合并在一起

我正在开发一个 SWI-Prolog 程序,在该程序中我将两个二叉搜索树合并在一起,但我得到了错误的输出。 BST T2 是将 BST T1 中的每个节点插入到 BST T 的结果。 merge(T,T1,T2). 我现在拥有的代码: add_BST(T , T1 , T2). add_BST(t(L , T1 , R ) , t(L , T2 , R), t(t(L , ROOT ... »

在 SICStus prolog 中使用 wordNet 同义词集

我想查找 wordNet 中最顶级的同义词集(最高级别)是什么,我该如何找到它们?我怎么知道每个顶级同义词下面有多少个 dauhter 同义词?通常我们使用hyp关系来做,我试着写: hyp(I, J), %[I would like to write here, be sure that there is no parent for I]. 你能帮我解决一下吗?... »

prolog中的尾递归程序,计算正数和负数

我想在 prolog 中编写一个尾递归程序:count_neg(Ls, N, R) 如果Ls 是整数列表并且N 是负元素的数量,则这是正确的。 R 应该代表非负元素的列表。 一个例子: count_neg([1,-2,0,1,2,-3],N,R). N = 2, R = 4. 这是我目前编写的代码: count_neg(Ls, N, R) :- count_neg(Ls, 0, 0, N... »