Prolog是最常用的逻辑编程语言。它通过按时间顺序回溯和通过统一的模式匹配来支持非确定性编程。
在许多 Prolog 指南中,以下代码用于说明 Prolog 中的“失败求反”。 not(Goal) :- call(Goal), !, 失败。 不是(目标)。 然而,那些相同的教程和文本警告...
我正在尝试在序言中为此语法实现一个解析器: 线路 → 线路 ;线路 |线 行 → 行数,行 |数量 数字 → 数字 |数量 数字 → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 代码是: 解析...
我正在研究序言中的搜索问题,其中代理的目标是找到一些宝藏。在每个时间步骤,代理可以使用根据无向梯度排列的门在房间之间移动...
prolog 有一个任务听起来像这样: 编写一个 istree 谓词,仅当其参数是二叉树时才返回 true。 例子: ?- istree(t(a,t(b,nil,nil),nil))。 返回是 ?- istree...
任何人都可以检查这是否是一个完整的BS代码。显然它不起作用,因为我的答案是错误的,但我只是想知道这是在正确的轨道上还是完全不......
作为一个简单的练习,我编写了自己的排列。 该堆栈溢出: 没有(_, [], [])。 没有(A,[A|T],T)。 没有(A,[H | T],[H | G]):-没有(A,T,G)。 my_permutation([], []). 我的_排列...
我一直在尝试学习 Prolog,这个特殊的事情已经困扰我一段时间了:为了完成任何事情,我的查询需要非常长。特别是,我有以下片段
使用带有内联谓词或“lambda”的“findall”的 Prolog 过滤列表
我有这些数据(数据是从 csv 读取的,它必须看起来像这样,又名术语列表,而不是数据库中定义的简单术语): 行 = [行('A', 150), 行('B', 300), 行('C', 50)]....
Prolog - 如何将 CSV 文件输出行转换为可查询术语?
我正在尝试学习使用 Prolog,并且非常惊喜地发现 SWI Prolog 提供了一个开箱即用的 CSV 库:https://www.swi-prolog.org/pldoc/man?section=csv 不过我不知道...
我正在尝试生成 6 个大小为 2N 的 0 和 1 向量,检查用 XOR 运算编写的约束、字典序和定义的辛积(接近标量积)...
我的Prolog表达式的结构与说谎者悖论的结构同构吗? 我们假设 Prolog 不会评估术语“not”和“true”的含义,并且 o...
我需要在序言中删除列表的一个元素,但只有当您将列表放入咨询中时它才有效,例如:eliminar(1,[1,2,3], X)。它返回 X=2,3,但是当我想删除
我有一个序言文件,其中有以下类型的谓词: nondet_(A、B、C、D、E、F、G、H) :- (I = 0), 摘要_5(A,B,C,D,J,K,L,G,H), nondet(I、B、C、D、E、F、K、L)。 摘要_5(A,B,C,D,E,F,G,H,I)...
我有一个这样形式的列表: [节点(2,5,4,3),节点(3,5,4,3),节点(2,10,12,4),节点(5,2,2,2)] 我需要一个方法来返回第一个值为 2 的所有节点。 然后: [节点(2,5,4,3),节点(2,10,...
我的目标是返回列表列表中最长的列表。例如:[[1,2,3],[1,2]]-> [1,2,3]。 我写了这个 list_max_len([L],L). list_max_len([X,Y|T],L):- 长度(X) >=长度(Y),
在可视化序言中,序言程序中有“域”部分,您可以在其中定义类型。 swi-prolog中有类似的东西吗? 在可视化序言中,类型定义如下: 域 新类型 =
在SWI-Prolog中,如何找到最大化或最小化某些原子的解决方案?
我有兴趣使用 Prolog 来找到最大化某些输出原子的解决方案。例如,有 10 个谓词: 解决方案(1)。 解决方案(2)。 解决方案(3)。 解决方案(4)。 解决方案(5)。 所以...
考虑一下: 列表长度([],0)。 list_length([H|T], N) :- list_length(T, N - 1)。 它不会给出编译错误,但不起作用。 我的想法是: 假设我调用 list_length([1], N) 我们问...
我编写了一个谓词 shuffle/3,它生成两个列表的“洗牌”。当第二个和第三个参数被实例化时,第一个参数变成一个列表,其中包含两个参数的所有元素
我想在Prolog中打印一个数字的除数,我编写了以下代码: find_and_display_divisors(N) :- write('除数'), write(N), write(':'), nl, find_divisors(N, 1)。