基本信息

编辑推荐
斯坦福大学逻辑编程公开课(CS151)教材,涵盖基本原理及流行应用
内容简介
目录
前言
第一部分 逻辑编程的介绍
第1章 概述 3
1.1 逻辑编程 3
1.2 逻辑程序作为可运行规范 3
1.3 逻辑编程的优点 4
1.4 逻辑编程的应用 5
1.5 基本逻辑编程 6
1.6 历史笔记 7
第2章 数据集 9
2.1 引言 9
2.2 概念化 9
2.3 数据集的定义 10
2.4 示例—女生联谊会 12
2.5 示例—亲属关系 13
2.6 示例—积木世界 14
2.7 示例—食物世界 16
2.8 重组 16
2.9 习题 18
前言
本书假设学生已经理解集合和集合运算,比如并集、交集等。本书还假设学生熟悉符号运算,掌握高中代数或有更高水平。
如果读者有运用计算思维的经验,会对阅读本书有帮助,但这并不是阅读本书的必备条件。另外,编程经验也不是必需的。实际上,我们已经观察到,一些具有编程背景的学生刚开始阅读这本书的时候比没有编程经验的学生要困难得多。为了欣赏逻辑编程的力量和美感,他们似乎需要忘掉一些以前学过的知识。
本书采用的逻辑编程方法来自30多年来我们在学术和商业环境中的研究、应用和教学。这些经历很宝贵,使得本书在以下两个方面不同于其他书籍。
第一,本书采用“模型–理论”的方法来阐述语义,而不用传统的“证据–理论”方法。从数据集的基本概念(即基本原子集)开始,我们引入了视图定义的经典逻辑程序,这种程序使用传统的Prolog表示法编写,但根据数据集而不是实现给出语义。我们也会在稍后的演示中讨论实现。
第二,我们同时关注数据集的改变与逻辑代理的状态。在讨论了数据集之后,我们引入了“更新”的基本概念,即“添加”和“删除”基本原子。根据这个基本概念,我们引入动态逻辑程序作为动作定义集,其中动作被概念化为同步更新集。这个扩展允许我们讨论逻辑代理以及静态逻辑程序。(逻辑代理实际上是一个状态机,其中每个状态被建模为数据集,每条弧被建模为一组更新。)
本书有印刷版和在线版,还通过教学网站提供能自动评分的在线练习、编程作业、逻辑编程工具和各种示例程序。该网站免费开放,网址为http://logicprogramming.stanford.edu。
最后,我们要感谢对本书的编写工作产生深远影响的两个人:Jeff Ullman 和 Bob Kowalski。Jeff Ullman是我们在斯坦福大学的同事,他编写的广受欢迎的教材启发了我们,并帮助我们认识到逻辑编程和数据库之间的深层关系。Bob Kowalski是逻辑编程的共同发明者,他倾听了我们的想法,为我们的工作提供帮助,甚至就本书的某些章节与我们进行了合作。
我们还想感谢Abhijeet Mohapatra。他是动态逻辑编程的共同发明者,也是本书中许多逻辑编程工具的共同创造者。他是这门课程的助教,为本书内容的呈现和组织提供了宝贵的建议。
最后,我们要感谢那些不得不忍受本书早期版本的学生们,在许多情况下,他们通过经历并不总是成功的实验来帮助我们找到正确的方法。尽管犯了很多错误,他们似乎还是学会了书中的内容,他们很聪明。他们的耐心和建设性的意见对于帮助我们理解哪些东西是可取的尤为宝贵。
Michael Genesereth和Vinay K. Chaudhri
2019年12月
媒体评论
—— Bob Kowalski,帝国理工学院名誉教授
在一个以深度学习和Python为主题的世界里,这本书有着十分重要的地位。它向读者介绍了传统逻辑编程的基本原理,并阐明了使用该技术为复杂系统创建可运行规范的益处。
—— Son Cao Tran,新墨西哥州立大学计算机科学教授
这本书写得很好,结构合理,对概念的解释清楚明了,并且各章后面的练习是由易到难循序渐进的,这使得人们能够在学习更复杂的知识之前快速理解简单的概念。
—— George Younger,斯坦福大学学生
本书采用一种创新的“模型-理论”的方法,概述了逻辑编程理论、当前技术和流行应用。两位作者均来自斯坦福大学计算机科学系,是逻辑编程方面的专家。本书英文版还配有专门的教学网站(http://logicprogramming.stanford.edu),提供所用语言的解释器和编译器,以及用于开发和部署实际逻辑程序的集成开发环境,还包括能自动评分的在线练习、编程作业、逻辑编程工具和各种示例程序。