SCIP - P16 逻辑式程序设计Ⅱ

第一小节:

构造一门语言的重要思想:

  1. 什么是基本元素  primary element
  2. 他们如果组合  combination
  3. 他们如何进行抽象  abstraction

上节课知道了如何使用查询语言,这节课我们来实现它(最底层的原理是模式匹配器 pattern matcher)

1.1 复习一波  pattern matcher 语法:

SCIP - P16 逻辑式程序设计Ⅱ

上图的语法是由 “MATCH” 这个procedure实现的

(MATCH pat data dictionary) -->  讨论的问题是 是否存在让pattern(参数1) 与 data object(参数2) match,在存在已知dictionary的情况下, 举例:

给定:

SCIP - P16 逻辑式程序设计Ⅱ

若匹配成功后的结果是:输出了一个扩展的字典  dictionary,否则输出FAIL

SCIP - P16 逻辑式程序设计Ⅱ

SCIP - P16 逻辑式程序设计Ⅱ

 

1.2 有了模式匹配器(pattern matcher )后,what is a primitive query? 基本查询是怎样的?(rather complicated things)

举例:  (JOB  ?x  (?D . ?Y))  --> 如何在系统实现? 

结构 --> two  stream in (database,  dictionary) , one stream out (成功后的扩展字典(并不只是一个),有些不成功的,不输出)(基本原理)

SCIP - P16 逻辑式程序设计Ⅱ

1.3 除了用流的方法,还有其他的方法来 arrange this match for a primitive query, 

the answer is this thing extends elegantly to implement the means of combination.

举例(更复杂的组合形式):

(AND (JOB  ?X  (?D  .  ?Y))   (SUPERVISOR  ?X  ?Z))  -->  注意在这个查询框架下其实默认限定了 前后两个 ?X是一样的

SCIP - P16 逻辑式程序设计Ⅱ

AND 基本结构(有点像 串联的感jio)了解一下 (又其实就是封装了一层),表现为基本的元素了,2个输入流,一个输出流

SCIP - P16 逻辑式程序设计Ⅱ

OR 的结构,原理类似(有点像 电路中并联的结构):

SCIP - P16 逻辑式程序设计Ⅱ

NOT的结构,原理(不会对字典进行任何的扩展,仅仅只是 filter):

SCIP - P16 逻辑式程序设计Ⅱ

LISP-VALUE  原理类似,它的filter会更复杂,因为它要 applies to predicate(谓词)

【关键思想】:这是 闭包的思想,  idea of closure, -->  我们通过组合手段构造的东西和基本的物件具有相同的结构

(AND JOB SALARY)  和  (AND JOB  (NOT ...))   -->  带来便利

 

提问:最初的字典来自哪里?

回答:最出开始是用空字典进行初始化的,随着查询,会不断的扩充字典(注意这些扩充的字典仅仅是在内存中,并不会直接存入数据库,除非你要存它,举例AND的查询中间的输出字典用于下一个query,这个字典仅仅是 temporary)。

提问:AND 查询中,把第一个query中数据库中的流传递到下一个query是否冗余,因为如果第一个query中判断没有的,第二个query有些也需要重复判断?

回答:图中仅仅是简单情况,实际中可以通过安排AND子句的顺序来消除不同类型的冗余,这也是这门查询语言prolog慢的原因之一

提问:Did you model the language on Prolog or did it just come out looking like Prolog?

回答:我们 是根据查询处理的基本原理建模在1971,但那时候没用流来实现,但是使用的时候会有各种的问题(稍后提到 )  从某种意义上来说它是Prolog(prolog 不是基于流,使用回溯策略   backtracking strategy,但是prolog的编译器经过的精心设计,所以可以高速运行)。这节课是我们设计的语言 行为上很像prolog。

 

第二小节:

上个小节 我们知道了 基本的查询和 以及如何使用流来实现 means of combination组合方式。

我们看下第三部分,如何进行抽象 Abstraction , the means of abstraction in this language are rules

SCIP - P16 逻辑式程序设计Ⅱ 

注意把刚才 的 AND  在最外层进行的封装,整一个大的框。

SCIP - P16 逻辑式程序设计Ⅱ

SCIP - P16 逻辑式程序设计Ⅱ