- 博客(58)
- 资源 (2)
- 收藏
- 关注
原创 Prolog的超集---ECLiPSe
大家在看SWI-Prolog参考手册时会看到“ECLiPSe”此时不要与集成开发环境Eclipse相混淆这两个是完全不同的东西。下面来介绍ECLiPSe:ECLiPSe是一种计算机编程语言,它用于开发和部署约束编程应用程序的软件系统,例如,在优化,计划,调度,资源分配,时间表,传输等领域。它也适合于教授组合问题解决的大多数方面,例如 问题建模,约束规划,数学规划和搜索技术。它包含约束求解器库,高级建模和控制语言(Prolog的超集),与第三方求解器的接口,集成开发环境以及用于嵌入主机环境的接口。ECL
2020-10-13 17:44:51 367 2
原创 使用文件
转载自:https://mp.weixin.qq.com/s/aZ8fhJMsv8pTZL2Wvoch-w本章涉及文件处理和模块化的各个方面。我们将学习三个知识点:1.谓词定义如何分布在不同文件中。2.如何编写模块化软件系统。3.如何将结果写入文件以及如何从文件读取输入。1通过文件分割程序在这一阶段,您已经编写了许多使用谓词append / 3和member / 2的程序。每次需要其中一个时,您可能要做的就是回到定义并将其复制到要使用它的文件中。也许,在做了几次之后,您开始认为.
2020-09-11 08:34:19 396
原创 数据库操作和收集解 上机操作
转载自:https://mp.weixin.qq.com/s/5I4tC82Vym4odRLcUAlLyw当每次输入listing命令时都会有经过系统内部排过序的谓词列出,所以我们在后续的操作中都采用有具体谓词名的命令来列出要查看的谓词。?- assert(happy(mia)).true.?- listing(happy).:- dynamic happy/1.happy(mia).true.?- assert(happy(vincent))....
2020-09-11 08:34:01 360
原创 数据库操作和收集解
转载自:https://mp.weixin.qq.com/s/5tNIRd0XRtuhO-6zcQ3_UA本章有两个主要目标:1.讨论Prolog中的数据库操作。2.讨论内置谓词,这些谓词使我们将问题的所有解答收集到一个表中1 数据库操作Prolog具有四个数据库操作命令:assert,retract,asserta和assertz。让我们看看如何使用它们。假设我们从一个空的数据库开始。因此,如果我们给出命令:?-listing.然后Prolog只会回答tr...
2020-09-11 08:33:42 260
原创 截断和否定 上机操作
转载自:https://mp.weixin.qq.com/s/ETG_9fiElwWtQYb-JUf6yA?- [user].|: p(X):- a(X).|: p(X):- b(X), c(X), d(X), e(X).|: p(X):- f(X).|: a(1).|: b(1).|: b(2).|: c(1).|: c(2).|: d(2).|: e(2).|: f(3).|: ^D% user://1 compiled 0.00 sec, 11 cl
2020-09-11 08:33:22 136
原创 使用文件 上机操作
转载自:https://mp.weixin.qq.com/s/DgFxF1Rj4HN13LzRmMgeEw?- ls. //列出当前目录的所有文件//请体会下面的正确命令?- ['kb2.pl'].true.?- ['kb2'].true.?- [kb2].true.?- edit(kb2).% Waiting for editor ...% Running make to reload modified files% Upd...
2020-09-11 08:32:52 273
原创 截断和否定
转载自:https://mp.weixin.qq.com/s/w5cjPDg0SDGiIMQjpXgYBw本章有两个主要目标:1.解释如何在cut谓词的帮助下控制Prolog的回溯行为。2.解释如何将截断打包成更结构化的形式,即否定为失败。1 截断自动回溯是Prolog最具特色的功能之一。但是回溯会导致效率低下。有时,Prolog可能会浪费时间探索无能为力的可能性。对其行为的这一方面进行一些控制将是一件令人愉快的事情,但是到目前为止,我们仅看到了两种(相当粗糙的)方法:更...
2020-09-10 09:31:10 579
原创 理解项 上机操作
转载自:https://mp.weixin.qq.com/s/zK48OWSjL-GUlBm9GmzOEA?- a==a.true.?- a==b.false.?- a=='a'.true.?- X==Y.false.?- X=Y.X = Y.?- a=X,a==X.X = a.?- X=Y,X==Y.X = Y.?- a\==a.false.?- a\==b.true.?- a...
2020-09-10 09:29:05 255
原创 理解项
转载自:https://mp.weixin.qq.com/s/-3da54b-UZ5VFBB5Ljl-FA本章有三个主要目标:1.引入==谓词。2.仔细研究项结构。3.介绍运算符。1比较项Prolog包含一个用于比较项的重要谓词,即恒等谓词== / 2。顾名思义,这测试了两个项是否相同。但是== / 2不会实例化变量,因此它与合一谓词= / 2不同。让我们看一些例子。?- a == a.true?- a == b.false?- a =...
2020-09-10 09:27:07 209
原创 更多确定子句文法 上机操作
转载自:https://mp.weixin.qq.com/s/7o4ZezcHZumZo_XCURQM-g$ vimex8-1.pl$ swipl ex8-1.plWarning: /Users/limanxi/swi-prolog/ex8-1.pl:17:Warning: Clauses ofnp/2are not together in the source-fileWarning: Earlier definition at /Users/xxxxxxx/sw...
2020-09-10 09:25:19 192
原创 更多确定子句语法
转载自:https://mp.weixin.qq.com/s/knJC5mlYgntbLMtmzeuC7A本章有两个主要目标:1.研究DCG表示法提供的两个重要功能:额外的参数和额外的目标。2.讨论DCGs的现状和局限性。1额外参数在上一章中,我们介绍了基本的DCG表示法。但是DCG所提供的功能远远超过我们迄今为止所看到的。首先,DCG允许我们指定额外的参数。多余的参数可以用于许多目的。我们将研究三个。上下文无关文法的特性作为第一个例子,让我们看看如何使用额外...
2020-09-10 09:21:13 398
原创 确定子句文法 上机操作
转载自:https://mp.weixin.qq.com/s/UYedzZIXz0JRYrYTNjItbw?- [user].|: s(Z):- np(X), vp(Y), append(X,Y,Z).|: np(Z):- det(X), n(Y), append(X,Y,Z).|: vp(Z):- v(X), np(Y), append(X,Y,Z).|: vp(Z):- v(Z).|: det([the]).|: det([a]).|: n([woman]).|: n
2020-09-10 09:17:35 162
原创 确定子句文法 练习与实践环节
转载自:https://mp.weixin.qq.com/s/PqjUQHSDy90KqX-tCugSuA3练习练习7.1。假设我们正在使用以下DCG:s --> foo,bar,wiggle.foo --> [choo].foo --> foo,foo.bar --> mar,zar.mar --> me,my.me --> [i].my --> [am].zar --> blar,car.blar ...
2020-09-10 09:15:02 169
原创 确定子句文法
转载自:https://mp.weixin.qq.com/s/dBwRTNeXKZi7Oux_wMWIYw本章有两个主要目标:1.介绍上下文无关文法(CFGs)及其相关概念。2.介绍确定子句文法(DCGs),这是一种内置的prolog机制,用于处理上下文无关文法(以及其他类型的语法)。1 上下文无关文法Prolog已被用于许多目的,但是其发明者Alain Colmerauer对计算语言学很感兴趣,而这仍然是该语言的经典应用。而且,Prolog提供了许多工具,可以简...
2020-09-10 09:11:31 760
原创 更多列表 上机操作
转载自:https://mp.weixin.qq.com/s/tkLM2F9yAkcOmszp_-DFow?- [user].|: append([],L,L).|: append([H|T],L2,[H|L3]) :- append(T,L2,L3).|: ^D% user://2 compiled 0.00 sec, 2 clausestrue.?- append([a,b,c],[1,2,3],[a,b,c,1,2,3]).true.?- append([a..
2020-09-10 09:08:27 144
原创 更多的列表
转载自:https://mp.weixin.qq.com/s/EA4anAY-Ga09Ht6bmY7oug本章有两个主要目标:1.要定义append / 3,这是一个用于连接两个表的谓词,并说明了可以使用的谓词。2.讨论两种反转表的方法:使用append / 3的朴素方法和使用累加器的更有效方法。1 Append我们将定义一个重要的谓词append / 3,其所有参数都是表。以声明的方式查看,当表L3是将表L1和L2串联在一起的结果时,append(L1,L2,L3)将成立...
2020-09-10 09:02:52 217
原创 算数 上机操作
转载自:https://mp.weixin.qq.com/s/1my79TnLOc0p0BWoSYlc7A1 Prolog中的算术?- 8 is 6+2.true.?- -2 is 6-8.true.?- 3 is 6/2.true.?- 1 is mod(7,2).true.?- X is 6+2.X = 8.?- X is 6*2.X = 12.?- R is mod(7,2).R = 1.?- [...
2020-09-09 09:53:12 156
原创 算术
转载自:https://mp.weixin.qq.com/s/WvQcyFSb4qb5SnHr0O3sKg1 Prolog中的算术Prolog提供了许多用于处理整数的基本算术工具(即,形式为...- 3,-2,-1、0、1、2、3、4 ...的数字)。大多数Prolog实施还提供了处理诸如1.53或6.35×105之类的实数(或浮点数)的工具,但我们将不讨论这些工具,因为它们对于本书中讨论的符号处理任务不是特别有用。另一方面,整数在符号任务中很有用(例如,我们使用它们来说明表的长度),因此了解如何.
2020-09-09 09:52:00 522
原创 列表 上机操作
转载自:https://mp.weixin.qq.com/s/45ossL8uSnbZLk1K-i-sEw1表?- [Head|Tail] = [mia, vincent, jules, yolanda].Head = mia,Tail = [vincent, jules, yolanda].?- [X|Y] = [mia, vincent, jules, yolanda].X = mia,Y = [vincent, jules, yolanda].?-...
2020-09-09 09:50:43 208
原创 实践环节
转载自:https://mp.weixin.qq.com/s/zbrHhIrwy2-nFgKhRfvKTQ5实践环节练习4的目的是帮助您熟悉递归表的思路。我们首先建议您进行一些跟踪,然后再进行一些编程练习。首先,系统地对a2b / 2进行大量跟踪,以确保您完全了解其工作原理。尤其是:1.跟踪一些成功的示例,这些示例不涉及变量。例如,跟踪查询a2b([a,a,a,a],[b,b,b,b])并将输出与文本中的讨论相关联。2.跟踪一些失败的简单示例。尝试使用涉及不同长度表的...
2020-09-09 09:48:51 139
原创 练习
转载自:https://mp.weixin.qq.com/s/yvlQFf6rfGB4FFEblT4e6g4练习练习4.1 Prolog如何响应以下查询?1. [a,b,c,d] = [a,[b,c,d]].2. [a,b,c,d] = [a|[b,c,d]].3. [a,b,c,d] = [a,b,[c,d]].4. [a,b,c,d] = [a,b|[c,d]].5. [a,b,c,d] = [a,b,c,[d]].6. [a,b,c,d] = [a,...
2020-09-09 09:47:32 140
原创 向下递归表
转载自:https://mp.weixin.qq.com/s/Ccuzt9N0vEgovgH4bR9jbQ3向下递归表member / 2谓词的工作方式是递归地处理表中的内容,对头部进行处理,然后对末尾进行相同处理。以这种方式递归表(或实际上是几个表)在Prolog中极为常见。实际上非常普遍,因此真正掌握这项技术很重要。因此,让我们来看另一个示例。在处理表时,我们经常希望将一个表与另一个表进行比较,或者将一个表的位复制到另一个表中,或者将一个表的内容转换为另一个表或类似的内容。这里有一...
2020-09-09 09:45:52 348
原创 成员
转载自:https://mp.weixin.qq.com/s/CssLyqHaXRdUFW1UUiMwNw2成员现在该来看一下我们用于处理表的递归Prolog程序的第一个示例。我们想知道的最基本的事情之一就是某物是否是表的元素。因此,让我们写一个程序,当输入任意对象X和表L作为输入时,它告诉我们X是否属于L。执行此操作的程序通常称为成员,这是Prolog程序的最简单示例利用表的递归结构。这里是:member(X, [X|T]).member(X, [H|T]):- member(X...
2020-09-09 09:44:32 105
原创 列表
转载自:https://mp.weixin.qq.com/s/Mgt7eWcPy_gfnrZeEDiKCQ本章有三个主要目标:1.介绍表,这是Prolog编程中经常使用的重要递归数据结构。2.要定义member / 2谓词,这是用于处理表的基本Prolog工具。3.介绍递归表的思路。1 表顾名思义,表只是项目的简单排列。更精确地说,它是元素的有限序列。以下是Prolog中表的一些示例:[mia, vincent, jules, yolanda][m...
2020-09-09 09:43:10 125
原创 递归 上机操作
转载自:https://mp.weixin.qq.com/s/kqzCFTLbKCIQPYn-E8lH4w$ vimeating.pl$ swiplWelcome to SWI-Prolog (threaded, 64 bits, version 8.1.15)SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.Please run ?- license. for legal details...
2020-09-09 09:40:44 188
原创 现在学 Prolog 递归
转载自:https://mp.weixin.qq.com/s/r6CcuC8n7iRaQSzShovl5w本章有两个主要目标:1.在Prolog中引入递归定义。2.表明Prolog程序的声明性含义与其程序含义之间可能存在不匹配。1递归定义谓词可以递归定义。粗略地说,如果谓词中的一个或多个规则引用了自己,则它是递归定义的。示例1:Eating考虑以下知识库: is_digesting(X,Y) :- just_ate(X,Y). is_di...
2020-09-09 09:34:17 2252
原创 现在学 Prolog 合一和证明搜索 上机操作
转载自:https://mp.weixin.qq.com/s/jRsgECeGagR-EOGIlLJUwQ$ swiplWelcome to SWI-Prolog (threaded, 64 bits, version 8.1.15)SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.Please run ?- license. for legal details.For online help a.
2020-09-08 10:00:31 212
原创 现在学 Prolog 合一和证明搜索
转载自:https://mp.weixin.qq.com/s/SeMjK-_XR69jSQEQ-iRHMg本章有两个主要目标:1.讨论Prolog中的合一,并解释Prolog合一与标准合一有何不同。在此过程中,我们将introduce/ 2,Prolog合一的内置谓词,并与check / 2合一,即标准合一的内置谓词。2.解释Prolog在尝试使用惯用方式从旧信息中推断出新信息时使用的搜索策略。1合一在上一章中使用知识库KB4时,我们简要提到了合一的思想。例如,我们说过Pro...
2020-09-08 09:58:37 641
原创 现在学 Prolog 事实,规则和查询上机练习
转载自:https://mp.weixin.qq.com/s/v0YrW7IvSRtguRFG_Ha6Jg第一章上机操作$ swiplWelcome to SWI-Prolog (threaded, 64 bits, version 8.1.15)SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.Please run ?- license. for legal details.For ...
2020-09-08 09:55:53 1000
原创 现在学 Prolog 事实,规则和查询
转载自:https://mp.weixin.qq.com/s/KEvuSWTwz6Ef1Y7-8riQZQ本文有两个主要目标:1.给出一些prolog程序的简单例子。这将向我们介绍prolog中的三个基本构造:事实、规则和查询。它还将向我们介绍一些其他主题,如prolog中逻辑的作用,以及借助变量执行合一的思想。2.开始prolog的系统研究,定义项、原子、变量和其他句法概念。1一些简单的例子prolog中只有三个基本结构:事实、规则和查询。事实和规则的集合称为知识库(或数据库),pro
2020-09-08 09:53:57 2188
原创 填字游戏
转载自:https://mp.weixin.qq.com/s/PbopBAcQo9q37_sUanh4zw给定一个填字游戏和一组单词的空的(或几乎空的)框架。问题是将这些词放入框架中。特定的填字游戏在文本文件中指定,该文件首先以任意顺序列出单词(每行一个单词)。然后,在空行之后,定义填字游戏框架。在此框架规范中,空字符位置由点(.)表示。为了简化解决方案,字符位置还可以包含预定义的字符值。然而谜题在文件p7_09a.dat中定义,其它谜题示例为p7_09b.dat和p7_09d.dat。还有一个
2020-09-08 09:45:34 824
原创 英文数字单词、一筐鸡蛋的问题
转载自:https://mp.weixin.qq.com/s/Drd-HeLIRTZY25rsrbLsXA英文数字单词在财务文档(如支票)上,有时必须用全文字写数字。示例:175必须写成one-seven-five。编写谓词full_words / 1以全字显示(非负)整数。程序文件名: p7_05.pl% full_words(N) :- print the number N in full words (English)% (non-negative integer) (+).
2020-09-08 09:43:44 141
原创 非图
转载自:https://mp.weixin.qq.com/s/_2K_ONH8BWHCMQ67kv4l_Q1994年前后,一种智力游戏在英国非常流行。《星期日电讯报》写道:“无图是来自日本的谜语,目前每周只在《星期日电讯报》上发表。简单地用你的逻辑和技能来完成网格并展示一张图片或图表。”作为一个Prolog程序员,你的处境更好:你可以让你的计算机来完成这项工作!难题是这样的:本质上,矩形位图的每一行和每一列都用其占用的单元格的不同字符串的相应长度进行注释。解决难题的人必须仅根据这些长度来完成位.
2020-09-08 09:41:50 399
原创 算术难题
转载自:https://mp.weixin.qq.com/s/wqbeHvQoafrGdpNBispMEA给定一个整数列表,找到插入算术符号(运算符)的正确方法,使结果为正确的等式。示例:使用数字列表[2,3,5,7,11],我们可以形成等式2-3+5+7 = 11或2=(3*5+7)/11(以及另外10个),解决这个问题的想法来自Roland Beuret。谢谢程序文件名:p7_04.pl% equation(L,LT,RT) :- L是数字列表,它们是算术项LT和RT中的叶子-从左...
2020-09-08 09:40:02 236
原创 冯·科赫猜想
转载自:https://mp.weixin.qq.com/s/BnSalO-hEPI-E7jmL2Pqnw给定具有n节点的树(因此有n-1边)。找到一种方法,从枚举节点1到n,因此,从边1到边n-1以这样的方式,对于每个边k其节点号的差等于k。推测这总是可能的。这是一个例子,可以很清楚地说明这一点:我们的任务我们的代码将以一棵树作为输入,我们可以采用所需的格式,但是对于测试用例,我们将通过它们的弧和它们的节点列表来提供树。例如,这是图片中树的输入:[d-a,a-g,b-c,e-f
2020-09-08 09:37:20 187
原创 骑士巡游
转载自:https://mp.weixin.qq.com/s/Mv1MAR0XTo-9eEZPSVXJGw国际象棋中马(骑士)的走法很特别:先横向或竖向走两格,再往左或往右走一格,并跳过路上的其他棋子。马(骑士)“L”形走法引出了很多数学趣题,其中最简单的是“骑士巡游”。马(骑士)要求进行一系列移动,使得它恰好访问国际象棋棋盘(或任何其他大小的棋盘)的每格各一次。下图表示一个5X5棋盘上的“巡游”,并显示了一条可能的路线。这条路线不是“闭合的”,即马的起点和终点不在同一格。你能在5X5棋盘上找出一条闭合
2020-09-08 09:36:41 1053
原创 八皇后问题
转载自:https://mp.weixin.qq.com/s/Kdvo_yGFaYmw5TjNg6Bb8Q这是计算机科学中的经典问题。目的是在棋盘上放置八个皇后不会有两个皇后互相攻击。也就是说,在同一行,同一列或同一对角线中,没有两个皇后区。我们通过允许棋盘的任意尺寸N来概括这个原始问题。我们用数字1..N表示皇后的位置。例如: [4,2,7,3,6,8,5,1]表示第一列中的皇后在第4行中,第二列中的皇后在第2行中,依此类推。通过使用数字1..N的置换,我们保证没有两个皇后在同一行中...
2020-09-07 09:46:43 543
原创 用Prolog解决数独
转载自:https://mp.weixin.qq.com/s/NE4j2Jc0vzw9pr2w4BF7hg我们先了解一下什么是数独数独(shù dú)是源自18世纪瑞士的一种数学游戏。它是一种运用纸、笔进行演算的逻辑游戏。数独有多种类型,我们仅以其中一种类型作为本文实例。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。方格水平方向有九横行,垂直方向有九纵列的矩形,画分八十一个小正方形,称为九宫格(.
2020-09-07 09:44:51 1684
原创 图 练习 5
转载自:https://mp.weixin.qq.com/s/mGqpI81rdsxGyaz1K-l6jw7、节点的度和图形着色程序文件p6_07.pl:1:-ensure_loaded(p6_01).% conversions2 :-ensure_loaded(p6_02).% adjacent/33% a)编写确定给定节点度数的谓词degree(Graph,Node,Deg)% degree(Graph,Node,Deg) :- Deg是图Grap...
2020-09-07 09:42:57 342
原创 图 练习 4
转载自:https://mp.weixin.qq.com/s/ymcl69qtM2sYA6O9wxv_JA上一练习中所需文件p6_04.dat的内容:graph([a, b, c, d, e, f, g, h], [e(a, b), e(a, d), e(b, c), e(b, e), e(c, e), e(d, e), e(d, f), e(d, g), e(e, h), e(f, g), e(g, h)]).5、构造标记图的最小生成树ms_tree(G,T,S) :- T是图G的最.
2020-09-07 09:38:53 297
SWI-Prolog 用户手册 8.0.3版本 英文(pdf)
2019-11-08
asp.net 程式设计基础篇
2010-06-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人