1、,2019年4月16日星期二,程序设计语言范型 Programming Languages Paradigms,教师: 张荣华华北电力大学计算机系软件教研室(保定),逻辑程序设计语言范型,Prolog语言数据抽象,第三部分,第八章,Prolog语言数据抽象,第八章 - 3,内容,1.基本概念 2.表处理及其应用举例 2.1 成员(member) 2.2 连接(append) 2.3 八皇后问题 2.4 骑士周游问题,Prolog语言数据抽象,第八章 - 4,1.基本概念,表(List):有限的元素序列。 由方括号 之间由逗号隔开的有序元素组成。 表中的元素可以是原子、结构、或任何其它的项,包括
2、表在内。,Prolog语言数据抽象,第八章 - 5,1.基本概念,任何非空的表 = 表头(head) + 表尾(tail) 表头:表的第一个元素; 表尾:除第一个元素,表的其它元素组成的表。 Prolog内部谓词“|” 用于将表分解为表头和表尾; 灵活使用|是写好Prolog表处理程序的关键!,Prolog语言数据抽象,第八章 - 6,1.基本概念,谓词“|”的使用,Prolog语言数据抽象,第八章 - 7,内容,1.基本概念 2.表处理及其应用举例 2.1 成员(member) 2.2 连接(append) 2.3 八皇后问题 2.4 骑士周游问题,Prolog语言数据抽象,第八章 - 8,
3、2.1 成员,member(系统内部函数) 判断任意给定的元素是否是表的成员。,Prolog语言数据抽象,第八章 - 9,2.1 成员,从过程的观点分析:,Prolog语言数据抽象,第八章 - 10,内容,1.基本概念 2.表处理及其应用举例 2.1 成员(member) 2.2 连接(append) 2.3 八皇后问题 2.4 骑士周游问题,Prolog语言数据抽象,第八章 - 11,2.2 连接,append(系统内部函数) 如果表L3是L1和L2的连接,则满足。,Prolog语言数据抽象,第八章 - 12,2.2 连接,定义append,L2,L3=T+L2,输入:,L3:,结果:,+,
4、Prolog语言数据抽象,第八章 - 13,2.2 连接,从过程的观点分析:,Prolog语言数据抽象,第八章 - 14,2.2 连接,习题 实现表的倒置,Prolog语言数据抽象,第八章 - 15,内容,1.基本概念 2.表处理及其应用举例 2.1 成员(member) 2.2 连接(append) 2.3 八皇后问题 2.4 骑士周游问题,Prolog语言数据抽象,第八章 - 16,2.3 八皇后问题,八皇后问题 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。,Prolog语言数据抽象,第八章 - 17,2.3 八
5、皇后问题,双坐标表示方法,1 2 3 4 5 6 7 8 X,8 7 6 5 4 3 2 1,Y,X1/Y1, X2/Y2, X3/Y3, X4/Y4, X5/Y5, X6/Y6, X7/Y7, X8/Y8,Prolog语言数据抽象,第八章 - 18,2.3 八皇后问题,Prolog语言数据抽象,第八章 - 19,内容,1.基本概念 2.表处理及其应用举例 2.1 成员(member) 2.2 连接(append) 2.3 八皇后问题 2.4 骑士周游问题,Prolog语言数据抽象,第八章 - 20,2.4 骑士周游问题,骑士周游问题(Knights tour problem) 骑士可以横向或纵向移动两个方格后再沿垂直方向移动一个方格(只要不超出棋盘的限制)。,Prolog语言数据抽象,第八章 - 21,2.4 骑士周游问题,3X3的骑士周游问题(Knights tour problem),