prolog相关内容

Prolog IntList 定义

hill(+IntList) 如果 IntList 由单调递增的 > 整数和后跟单调递减的整数组成,则成功.例如,>[1,2,5,8,11,6,3,-1] 是小山,但 [1,2,5,8,11,6,9,3,-1] 和 [1,2,3,4,5,6] >不是山丘.您可以假设 IntList 仅包含整数. 这是我到目前为止所做的: hill(列表):-增加(列表),减少(列表).增加([H|Tail ..
发布时间:2022-01-12 10:44:06 其他开发

Prolog delete:不删除与Element统一的所有元素

我在使用 SWI-Prolog 的 delete/3 谓词时遇到问题.最简单的方法只是一个简单的例子: ?- delete([(1,1),(1,2),(3,2)], (1,_), 列表).列表 = [(1,2),(3,2)]. 我希望 (1,2) 也被删除,因为 (1,_) 与 (1,2) 统一.SWIPL 帮助说: 删除List1的所有成员同时与Elem合一,结果与List2合一. ..
发布时间:2022-01-12 10:43:52 其他开发

Prolog循环和条件语句?

Prolog 中有什么东西可以像 for 循环和 if then 条件一样工作吗? 解决方案 if/then/else 可以通过 (->)/2 和 (;)/2 获得: ( 如果 ->然后;别的) 有时这很有用.但总的来说(当条件包含变量时),它会使您的程序不健全和不完整.只要可以使用模式匹配来描述条件,就应该使用模式匹配.然后,您不仅可以检查,还可以生成解决方案. ..
发布时间:2022-01-12 10:43:46 其他开发

Prolog - 复制一个列表

我需要在序言中复制列表. 我有清单: L = [a(string1,value1),a(string2,value2),a(string3,value3),a(string4,value4)]. 输出将是:L = [string1, string2, string3, string4]. 我该怎么做? 我可以通过代码复制整个列表: 复制([],[]).复制([H|L1],[ ..
发布时间:2022-01-12 10:43:22 其他开发

用 SICStus Prolog 概括斐波那契数列

我正在尝试为广义斐波那契数列 (GFS) 的查询找到解决方案.问题是:是否有任何 GFS 的第 12 个数字为 885?前 2 个数字可能被限制在 1 到 10 之间. 我已经找到了在从 (1, 1) 开始的序列中找到第 N 个数字的解决方案,其中我明确定义了初始数字.这就是我所拥有的: fib(1, 1).纤维(2, 1).纤维(N,X):-N#>1、Nmin1 #= N - 1,Nmi ..
发布时间:2022-01-12 10:42:56 其他开发

Prolog将分钟转换为小时

这是我创建的代码. mins_to_hours(In, H, M):-在= 60 时,H是H1+1,In1 是 In-60,mins_to_hours(In1, H1, M). 当分钟数小于 60 时,它可以正常工作,例如 ?- mins_to_hours(20,H,M).H = 0,米 = 20 ;错误的 ..
发布时间:2022-01-12 10:42:32 其他开发

在 prolog 中查找列表的所有 k 长度子集

我需要在 prolog 中找到一个 k 长度的列表子集,我有这个功能: 子集([],[]).子集([E|Tail],[E|NTail]):-子集(尾巴,NTail).子集([_|尾巴],NTail):-子集(尾巴,NTail). 我对列表的长度应用另一个规则, 长度(Xs,Size) 问题是它非常慢,因为它搜索全长子集,这个 k 长度的子集有直接的递归定义吗? 我搜索了一个星期, ..
发布时间:2022-01-12 10:42:25 其他开发

如何在所有参数模式的后继算术中实现阶乘序列?

下面的 Prolog 程序定义了一个谓词 fact/2,用于在后续算术中计算整数的阶乘: 事实(0,s(0)).事实(s(X),Y):-事实(X,Z),产品(s(X),Z,Y).产品(0,_,0).产品(s(U),V,W):-总和(V,X,W),产品(V,U,X).总和(0,Y,Y).总和(s(X),Y,s(Z)):-总和(X,Y,Z). 它适用于这种参数模式下的查询: ?- 事实(s(0) ..

列表的 Prolog 长度

如何计算列表的长度 ?- size_sub([[b,a,g], [9,3,7,4], [6]], X).X = [3, 4, 1].?- size_sub([[c,g,e,w], [7]], X).X = [4, 1].?- size_sub([], X).X = []. 解决方案 映射 length/2 在列表列表中,我们可以使用 ..
发布时间:2022-01-12 10:42:10 其他开发

为什么我无法通过 Prolog 获得 Ship Puzzle 的答案?

我需要使用 Prolog 解决 Ship Puzzle 问题.以下是事实. 有 5 艘船. 希腊船六点出发,载着咖啡. 中间的船有一个黑色的烟囱. 英国船九点出发. 带有蓝色烟囱的法国船在运送咖啡的船的左侧. 载可可的船的右侧是一艘前往马赛的船. 这艘巴西船正驶向马尼拉. 载米的船旁边是一艘带绿色烟囱的船. 去热那亚的船五点出发. 西班牙船七点出发,在前往马赛的船的右侧 ..
发布时间:2022-01-12 10:42:00 其他开发

如何获取列表方案和序言的第一个、中间和最后一个元素?

我正在尝试在 Scheme 和 Prolog 中编写一个返回列表的第一项、中间项和最后一项的函数.例如,find([4,5,8,7,9],L), L = [4,8,9]. 我想出了这段 Scheme 语言的代码,但是我是 Prolog 的新手,知道的不多,所以我如何在 Prolog 中得到相同的结果? (定义(第一个 L)(车L))(定义(最后一个 L)(如果(空?(cdr L))(车L) ..
发布时间:2022-01-12 10:41:42 其他开发

Prolog:将列表拆分为两个列表(唯一项/重复项)

我一直在尝试将给定列表拆分为两个不同的列表:唯一列表和重复列表.例如,如果我们有列表 [1, 1, 2, 3, 3, 4, 5] 我希望唯一列表是 [2, 4, 5] 并复制为 [1, 3].我不希望列表中的所有 1 都在重复列表中.我只需要其中之一.我现在的代码: compareL([_|[]], Unique, Dup).compareL([X3,Y3 | Tail], [X3 | Uniq ..
发布时间:2022-01-12 10:41:25 其他开发

这个素数相关谓词的瓶颈是什么?

所以这里是:我正在尝试计算低于 200 万的所有素数的总和(对于 这个问题),但我的程序很慢.我确实知道算法本身非常糟糕并且是蛮力的,但它似乎比我应该的要慢. 在这里,我将搜索限制为 20,000,这样结果就不会等待太久. 我不认为这个谓词很难理解,但我还是会解释一下:我计算所有低于 20,000 的素数的列表,然后对它们求和.和部分很好,素数部分真的很慢. problem_010(R) : ..
发布时间:2022-01-12 10:41:17 其他开发

Prolog如何将文件保存在现有文件中

添加新数据后如何保存在现有文件中 add_a_link(X,Y) :-告诉('alink.txt'),写(X),写('.'),写(Y),写('.'),放(10),告诉,write('数据写入'),荷兰语 这段代码只重写了文本文件. 解决方案 使用open/3和面向流的I/O: open(file, append, S), write(S, info(X,Y)), put_char(S ..
发布时间:2022-01-12 10:41:11 其他开发

Prolog插入排序

有一个简单的 Prolog 插入排序算法: sorting([A|B], Sorted) :- 排序(B, SortedTail), insert(A, SortedTail, Sorted).排序([],[]).插入(A,[B|C],[B|D]):- A @>B,!,插入(A,C,D).插入(A,C,[A|C]). 它在普通列表中表现良好: ?- 排序([5, 4, 9, 1, 3, 8] ..
发布时间:2022-01-12 10:40:54 其他开发

Prolog 联合失败

我试图了解 Prolog 中联合(内置谓词)的使用.在许多情况下,它似乎在它应该成功的时候却失败了.它似乎与列表元素的顺序有关.以下所有情况均失败(它们返回“false".). ?- union([1,2,3],[],[2,3,1]).?-联合([1,5,3],[1,2],[1,5,3,2]).?-联合([4,6,2,1],[2],[1,2,4,6]).?-联合([1,2],[],[2,1]). ..
发布时间:2022-01-12 10:40:30 其他开发

术语列表的术语扩展

假设我想要一些规则都遵循相同的模式.当我想通过明确列出所有可能的第一个参数来避免非确定性行为时,我遇到了这种情况.然而,我知道,对于某些可能性,我需要做同样的事情.处理它的一种方法是在末尾添加一个包罗万象的子句: foo(a) :-/* 做某事 */.foo(b) :-/* 做别的事*/.富(_)./* 忽略其余部分 */ 但这不是很好,因为我实际上不知道是否有意外的输入,或者我的程序是否出错 ..
发布时间:2022-01-12 10:40:13 其他开发

具有一定确定性的 member/2 代码

如何对最后一个具有确定性的成员/2 进行编码元素.目前我正在使用: 成员(X,[X|_]).成员(X,[_|Y]):-成员(X,Y). 当我查询以下内容时: ?- 成员(X,[1,2]).X = 1;X = 2;不 解释器在返回 2 后继续搜索,因为还有一个选择点.我如何实现 member/2这样就不会再发生了? 但是 member/2 的完整语义应该被保留,即答案如: ?- m ..
发布时间:2022-01-12 10:40:01 其他开发