摘要:
内容提要本章主要介绍使用递归操纵列表的一个实际例子:判断一个元素是否在包含在一个列表中。是时候介绍第一个Prolog中通过递归操纵列表的程序例子了。我们最感兴趣的事情之一是,某个对象是否是列表中的元素。所以,我们想写一个程序,当假设输入是一个对象X和一个列表L,得出结果是X是否属于L。这个程序的名字... 阅读全文
摘要:
内容提要本章主要介绍使用递归操纵列表的一个实际例子:判断一个元素是否在包含在一个列表中。是时候介绍第一个Prolog中通过递归操纵列表的程序例子了。我们最感兴趣的事情之一是,某个对象是否是列表中的元素。所以,我们想写一个程序,当假设输入是一个对象X和一个列表L,得出结果是X是否属于L。这个程序的名字... 阅读全文
摘要:
内容提要列表定义;合一在列表中的使用;匿名变量;列表定义正如名字暗示的,列表就是多个元素组成的集合。更精确地说,是元素的有限序列。在Prolog中的列表,有如下的一些具体例子:[mia, vincent, jules, yolanda][mia, robber(honey_bunny), X, 2,... 阅读全文
摘要:
在学习了前三章内容后,我们应该对Prolog编程有了直观和理性的认识。由于合一、变量初始化、证明搜索和递归都是Prolog的核心概念,所以有如下更多的一些实践和练习。这里我会先录入题目,后期再给出我自己的程序代码和一些思考。实践1试想有如下的描述迷宫的知识库。其中的事实描述了点和点之间的联通关系,即... 阅读全文
摘要:
练习题3.1 在之前的章节中,我们已经讨论了如下的谓词逻辑: descend(X, Y) :- child(X, Y). descend(X, Y) :- child(X, Z), descend(Z, Y).假设我们将谓词逻辑重构如下: descend(X, Y) :- child(X, Y). ... 阅读全文
摘要:
内容提要规则顺序目标顺序终止Prolog是第一门比较成功的逻辑编程语言。逻辑编程语言内在实现是简单和富有魅力的:程序员的工作简单地说就是描述问题;程序员应该写下(使用语言的逻辑)声明性的规格说明(即,一个知识库),去描述有趣的状态、事实和关系;程序员不应该告诉计算机如何去实现,而他根据问一些问题去获... 阅读全文
摘要:
在Prolog中,谓词可以递归地定义。简要地讲,一个谓词是递归定义的,如果一个或者多个规则的定义中包含了规则自身。例子1:消化考虑如下的知识库:is_digesting(X, Y) :- just_ate(X, Y).is_digesting(X, Y) :- just_ate(X, Z), is_... 阅读全文
摘要:
练习题 2.1 下面各组语句中,哪些组是能够合一的?如果能够合一,请给出变量初始化的信息。1. bread = bread.2. 'Bread' = bread.3. 'bread' = bread.4. Bread = bread.5. bread = sausage.6. food(bread)... 阅读全文
摘要:
证明搜索上一节我们已经学习了合一,本节我们继续学习Prolog是如何通过搜索知识库去决定输入的查询是否能够满足。我们将会学习证明搜索,并通过简单的一个例子去涵盖这个基础的概念。假设我们有如下的知识库:f(a).f(b).g(a).g(b). h(b).k(X) :- f(X), g(X), h(X)... 阅读全文
摘要:
内容提要:合一的定义;一些合一的例子;触发校验;使用合一编程;合一的定义在上一章的知识库KB4中,我们简单地提及了合一的思想。比如,Prolog将woman(X)和woman(mia)合一,所以把变量X初始化为mia。现在是时候更加细致地研究合一,因为合一是Prolog中最为基础的思想。回顾一下Pr... 阅读全文
摘要:
练习题 1.1 下面的字符序列哪些是原子,哪些是变量,哪些两者都不是?1. vINCENT2. Footmassage3. variable234. Variable20005. big_kahuna_burger6. 'big kahuna burger'7. big kahuna burger8... 阅读全文
|