SCIP - P16 逻辑式程序设计Ⅱ

2023-12-18 00:08
文章标签 逻辑 程序设计 p16 scip

本文主要是介绍SCIP - P16 逻辑式程序设计Ⅱ,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一小节:

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

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

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

1.1 复习一波  pattern matcher 语法:

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

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

给定:

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

 

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

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

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

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是一样的

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

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

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

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

 

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

 

 

这篇关于SCIP - P16 逻辑式程序设计Ⅱ的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/506356

相关文章

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

逻辑表达式,最小项

目录 得到此图的逻辑电路 1.画出它的真值表 2.根据真值表写出逻辑式 3.画逻辑图 逻辑函数的表示 逻辑表达式 最小项 定义 基本性质 最小项编号 最小项表达式   得到此图的逻辑电路 1.画出它的真值表 这是同或的逻辑式。 2.根据真值表写出逻辑式   3.画逻辑图   有两种画法,1是根据运算优先级非>与>或得到,第二种是采

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和

C语言程序设计 笔记代码梳理 重制版

前言 本篇以笔记为主的C语言详解,全篇一共十章内容,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行!  形而上学者谓之道,形而下学者谓之器 形而上学者谓之道,形而下学者谓之器 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute)  2.

ACM东北地区程序设计大赛

不得不说随着参赛级别的提高,题目真的是越来越难啊,不过队长真是给力啊,在我们三个共同努力之下拿下了地区赛三等奖,哈哈我们可是大一唯一一只获奖队,终于在这次比赛打败了田大神。。。大神是失手了,俺和他差距还是挺大的。。。队友陈彤马上要去服兵役了,他说这是我们送给他最好的离别礼物,希望那家伙在部队好好干,以后谁干揍我!!!东北地区赛结束后,今年已经估计没机会参加亚洲区比赛了,赶紧补高数和线数啊!!别挂了

【Java编程的逻辑】原子变量 CAS 显示锁

原子变量 在理解synchronized中有使用synchronized保证原子更新操作,但是使用synchronized成本太高了,需要先获取锁,最后还要释放锁,如果获取不到锁还需要等到。这些成本都是比较高的,对于这种情况,可以使用原子变量。 Java并发包中的基本原子变量类型有以下几种: AtomicBoolean:原子Boolean类型,常用来在程序中表示一个标志位 AtomicIn

【Java编程的逻辑】容器类的总结

抽象容器类 用法和特点 容器类有两个根接口,分别是Collection 和 Map ,Collection表示单个元素的集合,Map表示键值对的集合 。 Collection Collection表示的数据集合有基本的增、删、查、遍历等方法,但没有定义元素间的顺序或位置,也没有规定是否有重复元素。 List: 是Collection的子接口,表示有顺序或位置的数据集合,增加了根据

【Java编程的逻辑】堆与优先级队列PriorityQueue

完全二叉树 & 满二叉树 & 堆 基本概念 满二叉树是指除了最后一层外,每个节点都有两个孩子,而最后一层都是叶子节点,都没有孩子。 满二叉树一定是完全二叉树,但完全二叉树不要求最后一层是满的,但如果不满,则要求所有节点必须集中在最左边,从左到右是连续的,中间不能有空的。 特点 在完全二叉树中,可以给每个节点一个编号,编号从1开始连续递增,从上到下,从左到右 完全二叉树有一