现在学 Prolog
老农伯
技术
展开
-
现在学 Prolog 事实,规则和查询
转载自:https://mp.weixin.qq.com/s/KEvuSWTwz6Ef1Y7-8riQZQ本文有两个主要目标:1.给出一些prolog程序的简单例子。这将向我们介绍prolog中的三个基本构造:事实、规则和查询。它还将向我们介绍一些其他主题,如prolog中逻辑的作用,以及借助变量执行合一的思想。2.开始prolog的系统研究,定义项、原子、变量和其他句法概念。1一些简单的例子prolog中只有三个基本结构:事实、规则和查询。事实和规则的集合称为知识库(或数据库),pro原创 2020-09-08 09:53:57 · 2143 阅读 · 0 评论 -
现在学 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 · 974 阅读 · 0 评论 -
现在学 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 · 626 阅读 · 0 评论 -
现在学 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 · 203 阅读 · 0 评论 -
现在学 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 · 2214 阅读 · 0 评论 -
递归 上机操作
转载自: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 · 177 阅读 · 0 评论 -
列表
转载自: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 · 112 阅读 · 0 评论 -
成员
转载自: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 · 96 阅读 · 0 评论 -
向下递归表
转载自:https://mp.weixin.qq.com/s/Ccuzt9N0vEgovgH4bR9jbQ3向下递归表member / 2谓词的工作方式是递归地处理表中的内容,对头部进行处理,然后对末尾进行相同处理。以这种方式递归表(或实际上是几个表)在Prolog中极为常见。实际上非常普遍,因此真正掌握这项技术很重要。因此,让我们来看另一个示例。在处理表时,我们经常希望将一个表与另一个表进行比较,或者将一个表的位复制到另一个表中,或者将一个表的内容转换为另一个表或类似的内容。这里有一...原创 2020-09-09 09:45:52 · 340 阅读 · 0 评论 -
练习
转载自: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 · 129 阅读 · 0 评论 -
实践环节
转载自: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 · 129 阅读 · 0 评论 -
列表 上机操作
转载自: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 · 191 阅读 · 0 评论 -
算术
转载自: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 · 485 阅读 · 0 评论 -
算数 上机操作
转载自: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 · 140 阅读 · 0 评论 -
更多的列表
转载自: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 · 209 阅读 · 0 评论 -
更多列表 上机操作
转载自: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 · 135 阅读 · 0 评论 -
确定子句文法
转载自:https://mp.weixin.qq.com/s/dBwRTNeXKZi7Oux_wMWIYw本章有两个主要目标:1.介绍上下文无关文法(CFGs)及其相关概念。2.介绍确定子句文法(DCGs),这是一种内置的prolog机制,用于处理上下文无关文法(以及其他类型的语法)。1 上下文无关文法Prolog已被用于许多目的,但是其发明者Alain Colmerauer对计算语言学很感兴趣,而这仍然是该语言的经典应用。而且,Prolog提供了许多工具,可以简...原创 2020-09-10 09:11:31 · 740 阅读 · 0 评论 -
确定子句文法 练习与实践环节
转载自: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 · 146 阅读 · 0 评论 -
确定子句文法 上机操作
转载自: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 · 150 阅读 · 0 评论 -
更多确定子句语法
转载自:https://mp.weixin.qq.com/s/knJC5mlYgntbLMtmzeuC7A本章有两个主要目标:1.研究DCG表示法提供的两个重要功能:额外的参数和额外的目标。2.讨论DCGs的现状和局限性。1额外参数在上一章中,我们介绍了基本的DCG表示法。但是DCG所提供的功能远远超过我们迄今为止所看到的。首先,DCG允许我们指定额外的参数。多余的参数可以用于许多目的。我们将研究三个。上下文无关文法的特性作为第一个例子,让我们看看如何使用额外...原创 2020-09-10 09:21:13 · 386 阅读 · 0 评论 -
更多确定子句文法 上机操作
转载自: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 · 180 阅读 · 0 评论 -
理解项
转载自: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 · 191 阅读 · 0 评论 -
理解项 上机操作
转载自: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 · 242 阅读 · 0 评论 -
截断和否定
转载自:https://mp.weixin.qq.com/s/w5cjPDg0SDGiIMQjpXgYBw本章有两个主要目标:1.解释如何在cut谓词的帮助下控制Prolog的回溯行为。2.解释如何将截断打包成更结构化的形式,即否定为失败。1 截断自动回溯是Prolog最具特色的功能之一。但是回溯会导致效率低下。有时,Prolog可能会浪费时间探索无能为力的可能性。对其行为的这一方面进行一些控制将是一件令人愉快的事情,但是到目前为止,我们仅看到了两种(相当粗糙的)方法:更...原创 2020-09-10 09:31:10 · 564 阅读 · 0 评论 -
截断和否定 上机操作
转载自: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 · 126 阅读 · 0 评论 -
数据库操作和收集解
转载自: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 · 245 阅读 · 0 评论 -
数据库操作和收集解 上机操作
转载自: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 · 347 阅读 · 0 评论 -
使用文件
转载自:https://mp.weixin.qq.com/s/aZ8fhJMsv8pTZL2Wvoch-w本章涉及文件处理和模块化的各个方面。我们将学习三个知识点:1.谓词定义如何分布在不同文件中。2.如何编写模块化软件系统。3.如何将结果写入文件以及如何从文件读取输入。1通过文件分割程序在这一阶段,您已经编写了许多使用谓词append / 3和member / 2的程序。每次需要其中一个时,您可能要做的就是回到定义并将其复制到要使用它的文件中。也许,在做了几次之后,您开始认为.原创 2020-09-11 08:34:19 · 378 阅读 · 0 评论 -
使用文件 上机操作
转载自: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 · 256 阅读 · 0 评论