描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111691815丛书名: 计算机科学丛书
内容简介
本书采用一种创新的模型论进行逻辑编程,从数据集的基本概念(即闭原子集)开始。沿着这一基本概念,我们引入视图(即虚拟关系);我们将经典逻辑程序定义为视图定义集,使用传统的类似于Prolog的表示法编写,但语义是根据数据集而不是根据实现方式给出。然后介绍了一些闭原子操作,如“添加”和“删除。
目 录
译者序
前言
部分 逻辑编程的介绍
第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
第二部分 查询的更新
第3章 查询 23
3.1 引言 23
3.2 查询语法 24
3.3 查询语义 25
3.4 安全性 26
3.5 预定义概念 27
3.6 示例—亲属关系 28
3.7 示例—地图着色 29
3.8 习题 30
第4章 更新 33
4.1 引言 33
4.2 更新语法 33
4.3 更新语义 34
4.4 同步更新 35
4.5 示例—亲属关系 36
4.6 示例—颜色 37
4.7 习题 40
第5章 查询评估 43
5.1 引言 43
5.2 评估真值查询 43
5.3 匹配 44
5.4 用变量评估查询 47
5.5 计算分析 48
5.6 习题 49
第6章 视图优化 51
6.1 引言 51
6.2 子目标排序 51
6.3 子目标移除 53
6.4 规则移除 55
6.5 示例—密码算术 55
6.6 习题 57
第三部分 视图的定义
第7章 视图定义 61
7.1 引言 61
7.2 语法 62
7.3 语义 63
7.4 半正程序 66
7.5 分层程序 68
7.6 习题 71
第8章 视图评估 73
8.1 引言 73
8.2 基础目标和规则的自顶向下处理 74
8.3 合一 75
8.4 非基础查询和规则的自顶向下处理 79
8.5 习题 81
第9章 示例 83
9.1 引言 83
9.2 示例—亲属关系 83
9.3 示例—积木世界 84
9.4 示例—模运算 86
9.5 示例—有向图 87
9.6 习题 88
第10章 列表、集合、树 91
10.1 引言 91
10.2 示例—皮亚诺公理 91
10.3 列表 93
10.4 示例—排序列表 94
10.5 示例—集合 95
10.6 示例—树 96
10.7 习题 96
第11章 动态系统 99
11.1 引言 99
11.2 表示 100
11.3 仿真 101
11.4 计划 103
11.5 习题 104
第12章 元知识 105
12.1 引言 105
12.2 自然语言处理 105
12.3 布尔逻辑 107
12.4 习题 108
第四部分 操作的定义
第13章 操作 113
13.1 引言 113
13.2 语法 113
13.3 语义 115
13.4 习题 118
第14章 动态逻辑程序 121
14.1 引言 121
14.2 响应式系统 121
14.3 封闭系统 122
14.4 混合主动 124
14.5 同时动作 124
14.6 习题 126
第15章 数据库管理 127
15.1 引言 127
15.2 约束更新 127
15.3 物化视图维护 128
15.4 通过视图更新 129
15.5 习题 130
第16章 交互式工作表 131
16.1 交互式工作表简介 131
16.2 示例 132
16.3 网页数据 133
16.4 手势 134
16.5 操作定义 135
16.6 视图定义 136
16.7 语义建模 137
第五部分 结论
第17章 其他类型的逻辑程序设计 143
17.1 引言 143
17.2 逻辑生产系统 143
17.3 约束逻辑编程 144
17.4 析取逻辑编程 145
17.5 存在逻辑编程 146
17.6 回答集编程 147
17.7 归纳逻辑编程 149
附录A EpilogJS中的预定义概念 151
附录B Sierra 161
参考文献 182
前言
部分 逻辑编程的介绍
第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
第二部分 查询的更新
第3章 查询 23
3.1 引言 23
3.2 查询语法 24
3.3 查询语义 25
3.4 安全性 26
3.5 预定义概念 27
3.6 示例—亲属关系 28
3.7 示例—地图着色 29
3.8 习题 30
第4章 更新 33
4.1 引言 33
4.2 更新语法 33
4.3 更新语义 34
4.4 同步更新 35
4.5 示例—亲属关系 36
4.6 示例—颜色 37
4.7 习题 40
第5章 查询评估 43
5.1 引言 43
5.2 评估真值查询 43
5.3 匹配 44
5.4 用变量评估查询 47
5.5 计算分析 48
5.6 习题 49
第6章 视图优化 51
6.1 引言 51
6.2 子目标排序 51
6.3 子目标移除 53
6.4 规则移除 55
6.5 示例—密码算术 55
6.6 习题 57
第三部分 视图的定义
第7章 视图定义 61
7.1 引言 61
7.2 语法 62
7.3 语义 63
7.4 半正程序 66
7.5 分层程序 68
7.6 习题 71
第8章 视图评估 73
8.1 引言 73
8.2 基础目标和规则的自顶向下处理 74
8.3 合一 75
8.4 非基础查询和规则的自顶向下处理 79
8.5 习题 81
第9章 示例 83
9.1 引言 83
9.2 示例—亲属关系 83
9.3 示例—积木世界 84
9.4 示例—模运算 86
9.5 示例—有向图 87
9.6 习题 88
第10章 列表、集合、树 91
10.1 引言 91
10.2 示例—皮亚诺公理 91
10.3 列表 93
10.4 示例—排序列表 94
10.5 示例—集合 95
10.6 示例—树 96
10.7 习题 96
第11章 动态系统 99
11.1 引言 99
11.2 表示 100
11.3 仿真 101
11.4 计划 103
11.5 习题 104
第12章 元知识 105
12.1 引言 105
12.2 自然语言处理 105
12.3 布尔逻辑 107
12.4 习题 108
第四部分 操作的定义
第13章 操作 113
13.1 引言 113
13.2 语法 113
13.3 语义 115
13.4 习题 118
第14章 动态逻辑程序 121
14.1 引言 121
14.2 响应式系统 121
14.3 封闭系统 122
14.4 混合主动 124
14.5 同时动作 124
14.6 习题 126
第15章 数据库管理 127
15.1 引言 127
15.2 约束更新 127
15.3 物化视图维护 128
15.4 通过视图更新 129
15.5 习题 130
第16章 交互式工作表 131
16.1 交互式工作表简介 131
16.2 示例 132
16.3 网页数据 133
16.4 手势 134
16.5 操作定义 135
16.6 视图定义 136
16.7 语义建模 137
第五部分 结论
第17章 其他类型的逻辑程序设计 143
17.1 引言 143
17.2 逻辑生产系统 143
17.3 约束逻辑编程 144
17.4 析取逻辑编程 145
17.5 存在逻辑编程 146
17.6 回答集编程 147
17.7 归纳逻辑编程 149
附录A EpilogJS中的预定义概念 151
附录B Sierra 161
参考文献 182
前 言
本书是关于逻辑编程的入门教科书,它主要适用于本科生,但也适合中学生和低年级研究生阅读。
本书假设学生已经理解集合和集合运算,比如并集、交集等。本书还假设学生熟悉符号运算,掌握高中代数或有更高水平。
如果读者有运用计算思维的经验,会对阅读本书有帮助,但这并不是阅读本书的条件。另外,编程经验也不是必需的。实际上,我们已经观察到,一些具有编程背景的学生刚开始阅读这本书的时候比没有编程经验的学生要困难得多。为了欣赏逻辑编程的力量和美感,他们似乎需要忘掉一些以前学过的知识。
本书采用的逻辑编程方法来自30多年来我们在学术和商业环境中的研究、应用和教学。这些经历很宝贵,使得本书在以下两个方面不同于其他书籍。
,本书采用“模型–理论”的方法来阐述语义,而不用传统的“证据–理论”方法。从数据集的基本概念(即基本原子集)开始,我们引入了视图定义的经典逻辑程序,这种程序使用传统的Prolog表示法编写,但根据数据集而不是实现给出语义。我们也会在稍后的演示中讨论实现。
第二,我们同时关注数据集的改变与逻辑代理的状态。在讨论了数据集之后,我们引入了“更新”的基本概念,即“添加”和“删除”基本原子。根据这个基本概念,我们引入动态逻辑程序作为动作定义集,其中动作被概念化为同步更新集。这个扩展允许我们讨论逻辑代理以及静态逻辑程序。(逻辑代理实际上是一个状态机,其中每个状态被建模为数据集,每条弧被建模为一组更新。)
本书有印刷版和在线版,还通过教学网站提供能自动评分的在线练习、编程作业、逻辑编程工具和各种示例程序。该网站免费开放,网址为http://logicprogramming.stanford.edu。
后,我们要感谢对本书的编写工作产生深远影响的两个人:Jeff Ullman 和 Bob Kowalski。Jeff Ullman是我们在斯坦福大学的同事,他编写的广受欢迎的教材启发了我们,并帮助我们认识到逻辑编程和数据库之间的深层关系。Bob Kowalski是逻辑编程的共同发明者,他倾听了我们的想法,为我们的工作提供帮助,甚至就本书的某些章节与我们进行了合作。
我们还想感谢Abhijeet Mohapatra。他是动态逻辑编程的共同发明者,也是本书中许多逻辑编程工具的共同创造者。他是这门课程的助教,为本书内容的呈现和组织提供了宝贵的建议。
后,我们要感谢那些不得不忍受本书早期版本的学生们,在许多情况下,他们通过经历并不总是成功的实验来帮助我们找到正确的方法。尽管犯了很多错误,他们似乎还是学会了书中的内容,他们很聪明。他们的耐心和建设性的意见对于帮助我们理解哪些东西是可取的尤为宝贵。
本书假设学生已经理解集合和集合运算,比如并集、交集等。本书还假设学生熟悉符号运算,掌握高中代数或有更高水平。
如果读者有运用计算思维的经验,会对阅读本书有帮助,但这并不是阅读本书的条件。另外,编程经验也不是必需的。实际上,我们已经观察到,一些具有编程背景的学生刚开始阅读这本书的时候比没有编程经验的学生要困难得多。为了欣赏逻辑编程的力量和美感,他们似乎需要忘掉一些以前学过的知识。
本书采用的逻辑编程方法来自30多年来我们在学术和商业环境中的研究、应用和教学。这些经历很宝贵,使得本书在以下两个方面不同于其他书籍。
,本书采用“模型–理论”的方法来阐述语义,而不用传统的“证据–理论”方法。从数据集的基本概念(即基本原子集)开始,我们引入了视图定义的经典逻辑程序,这种程序使用传统的Prolog表示法编写,但根据数据集而不是实现给出语义。我们也会在稍后的演示中讨论实现。
第二,我们同时关注数据集的改变与逻辑代理的状态。在讨论了数据集之后,我们引入了“更新”的基本概念,即“添加”和“删除”基本原子。根据这个基本概念,我们引入动态逻辑程序作为动作定义集,其中动作被概念化为同步更新集。这个扩展允许我们讨论逻辑代理以及静态逻辑程序。(逻辑代理实际上是一个状态机,其中每个状态被建模为数据集,每条弧被建模为一组更新。)
本书有印刷版和在线版,还通过教学网站提供能自动评分的在线练习、编程作业、逻辑编程工具和各种示例程序。该网站免费开放,网址为http://logicprogramming.stanford.edu。
后,我们要感谢对本书的编写工作产生深远影响的两个人:Jeff Ullman 和 Bob Kowalski。Jeff Ullman是我们在斯坦福大学的同事,他编写的广受欢迎的教材启发了我们,并帮助我们认识到逻辑编程和数据库之间的深层关系。Bob Kowalski是逻辑编程的共同发明者,他倾听了我们的想法,为我们的工作提供帮助,甚至就本书的某些章节与我们进行了合作。
我们还想感谢Abhijeet Mohapatra。他是动态逻辑编程的共同发明者,也是本书中许多逻辑编程工具的共同创造者。他是这门课程的助教,为本书内容的呈现和组织提供了宝贵的建议。
后,我们要感谢那些不得不忍受本书早期版本的学生们,在许多情况下,他们通过经历并不总是成功的实验来帮助我们找到正确的方法。尽管犯了很多错误,他们似乎还是学会了书中的内容,他们很聪明。他们的耐心和建设性的意见对于帮助我们理解哪些东西是可取的尤为宝贵。
Michael Genesereth和Vinay K. Chaudhri
2019年12月
评论
还没有评论。