LR(0)项目集规范族的构造

 此文略长。我也没想到这写起来这么多,但对构造过程绝对清楚,一步步慢慢看吧。 LR的第一个L和LL的第一个L含义相同,即从左到右扫描句子 ,第二个R表示Right most最右推导。 在通常的描述中,后面还有一个括号里面的数字如,LR(0)、LR(1)这样,括号里面的数字表示用于决策所需的后续token分词数。 首先看一下LR分析器的模型图 可惜看出,LR分析器最关键的部分就是 LR分析表了,而LR分析表的构建是由已构造出的LR(0)项目集规范族来进行构造的。LR分析法貌似是不要求掌握的,而且这部分比我想象的还要复杂,今天看了好多。才勉强搞清楚这个项目集规范族的构造,但是用来锻炼思维确实不错啊。 项目集,那么字面上看就是项目的集合了,项目是什么呢。这个也确实不好说,书上是说在文法G中每个产生式的右部适当位置添加一个圆点构成LR(0)项目,举个例子吧。 比如对于 A->xyz 这条产生式可以构造的LR(0)项目就有4个 A->.xyz A->x.yz A->xy.z A->xyz. 这样很清楚了吧,就是用.分割。这个分割产生的四个项目在进行真正的语法分析的时候对应不同的操作,比如规约还是移位。这里不讨论。重点是项目集规范族的构造, 在知道了LR(0)项目后,可以来看看项目集规范族的定义, 对于构成识别一个文法活前缀的DFA项目集(状态)的全体我们称之为这个文法的LR(0)项目集规范族。至于什么是活前缀呢,定义如下 对于任一文法G[S],若S’经过任意次推导得到αAω,继续经过一次推导得到![]}/images/6b23dd171a1f672514a2dbb29175df032a1f63d4.gif)αβω,若γ是αβ的前缀,则称γ是G的一个活前缀。 现在知道了LR(0)项目,了解了活前缀,和项目集规范族的定义,还须引入LR(0)项目集的闭包函数CLOSURE和状态转换函数GO两个概念,先给出数学上的定义,如果你觉得麻烦可以跳过,后面会给出一道例题。 ① 闭包函数CLOSURE(I)的定义如下: a)I的项目均在CLOSURE(I)中。 b)若A→α·Bβ属于CLOSURE(I),则每一形如B→·γ的项目也属于CLOSURE(I)。 c)重复b)直到不出现新的项目为止。即CLOSURE(I)不再扩大。 ② 转换函数GO(I,X)的定义: GO(I,X)=CLOSURE(J) 其中:I为包含某一项目的状态,就是前面我们说的那四个了。,X为一文法符号,X∈(VN∪VT),J={任何形如A→αX·β的项目| A→α·Xβ属于I}。 这样就可以使用闭包函数和转换函数构造文法G′的LR(0)项目集规范族,其步骤如下: a)置项目S′→·S为初态集的核,然后对核求闭包,CLOSURE({S′→·S})得到初态的项目集。 b)对初态集或其它所构造的项目集应用转换函数GO(I,X)=CLOSURE(J),求出新状态J的项目集。 c)重复b)直到不出现新的项目为止。 开始拿个例题来说明,定义没例题看起来看难了。 例题:对于下列文法,S→aS|bS|a,构造该文法的LR(0)项目集规范族 思路就是利用闭包函数CLOSURE和转换函数GO来构造。通过计算函数CLOSURE和GO得到文法的LR(0)项目集规范族,而GO函数则把LR(0)项目集规范族连成一个识别该文法所产生的活前缀的DFA。DFA大家都知道,有穷自动机。 (1)将文法G(S)拓广为G(S’)也就是该文法的增广文法,目的是使语法分析器知道何时应该停止并接受该串,也就是说当使用S’->S进行规约的时候,就结束。 (0)S’→S (1)S→aS (2)S→bS (3)S→a 构造该文法的LR(0)项目集规范族,I就是产生式,至于I0 I1就是往下递增就可以了。没什么特别的意思。: I0=CLOSURE({S’ →•S})={S’ →•S, S→•aS, S→•bS, S→•a} //第一条是固定的,都是求S’ →•S的闭包。而因为右侧的S又可以推导出后面三个,所以后面三个式子是属于该闭包的。在闭包的规则中可以看出,若A→α·Bβ属于CLOSURE(I),此时S’ →•S属于闭包,S相当于规则中的B,则每一形如B→·γ的项目也属于CLOSURE(I),此处相当于S->后面的三个推导式。加上.就可以了 I1=GO( I0 , a)=CLOSURE({S→a•S , S→a•})={S→a•S , S→a• , S→•aS, S→•bS, S→•a } //第二条你可能已经看出来了,其实就是把转换函数GO反过来用,在GO函数中,X为一文法符号,J={任何形如A→αX·β的项目| A→α·Xβ属于I}。也就是在I0中,找到右侧包含a的项目,然后将.右移一位来求他们的闭包函数,此处,I0中包含.a的项目为 S→•aS和 S→•a,.右移一位变成S→a•S , S→a•,求闭包函数的规则和上面那条是一样的,继续找推导式右边可以推导出来的式子就可以了,此处,右边同样是S可以推导出三个式子,前面加上.就可以了。 I2=GO(I0 , b)=CLOSURE({S→b•S })={ S→b•S, S→•aS, S→•bS, S→•a } //第三条仿照第二条进行推导,先在I0中找有.b的,然后右移一位,然后推导式右侧的S继续用题目给出的推导,然后前面加上. I3=GO(I0 , S)=CLOSURE({S’ →S•})={ S’ →S•} //第四条因为右侧包含.S的只有一项。必须是.S。所以只有一个,右移后求闭包即可。因为S是右侧的第一位,所以不用再向下推导了,规则是:A→α·Bβ属于CLOSURE(I),此处是S’ →S•,则B→·γ的项目也属于CLOSURE(I),此处S相当于规则中的α,无B。。。。 因为GO(I1, a)=CLOSURE({S→a•S , S→a•})=I1, //第五条同理,在I1中找有右侧有.a的项目,右移一位。进行求闭包,发现和I1求闭包的变量是一样的。所以结果必然也和I1是一样的。 GO(I1, b)=CLOSURE(S→b•S)=I2. //第六条没有新的I产生。 I4=GO(I1, S)=CLOSURE({S→aS•})={S→aS•} //这第七条在I1找右侧包含.S的项目,只有S→a•S,右移后求闭包,同第四条,无B,所以直接如此。 GO(I2, a)= CLOSURE({S→a•S , S→a•})=I1 GO(I2, b)=CLOSURE({S→b•S})=I2 I5=GO(I2, S)=CLOSURE({S→bS•})={S→bS•} 此时应该继续求GO(I3, a),GO(I3, b)和,GO(I3, S),但显然I3中没有.a,没有.b也没有.S,所以不用多此一举了, 继续求GO(I4, a),GO(I4, b)和,GO(I4, S),显然同上,也没有。所以也不用求了, 继续求GO(I5, a),GO(I5, b)和,GO(I5, S),理由同上,没有任何必要了 最终,项目集I0,I1,I2,I3,I4和I5构成了该文法的LR(0)项目集规范族。 编译原理真是博大精深啊。就一个简单的三个推导式就得这么多步骤才构造了一个规范族,还要利用规范族来构造LR分析表,这。。手工果断不是事啊。今天看了几个小时才完全弄清楚LR(0)项目集规范族的构造。例题的步骤是我自己写的。这篇文章写了2个小时。。太费脑子了。。慢慢再写产生活前缀的DFA和LR分析表吧。 参考: http://metc.gdut.edu.cn/compile/nandian/n-7.htm

2012-05-12 · 1 min · bystander

《乌合之众》笔记下部

 看完了下部,本书绝对是群体心理学的经典。没有废话,180多页的小册子讲的非常非常好。 执政府和帝国的具体工作就是用新的名称把过去大多数的制度重新包装一遍,用新名词代替那些能够让群众想起不利形象的名称。因为新鲜能够防止这种联想。 统治者的艺术,就像律师的艺术,首先在于驾驭辞藻的学问。 推动各民族演化的主要因素,永远不是真理,而是谬误。 社会主义的谬误,群众从来不渴求真理,他们需要对他们有诱惑力的谬误,凡是能供应幻觉的,都是他们的主人,使他们幻灭的。都将成为牺牲品。 尽管存在着理性,文明的动力仍然是各种感情–譬如尊严,自我牺牲,宗教信仰,爱国主义以及对荣誉的爱 只要有一些生物聚集在一起,不管是人还是动物,都会本能的让自己处在一个头领的统治之下。 头脑敏锐,深谋远虑的人往往不能成为群体领袖,因为他们这种品质会让人犹疑不决,而那些有毛病的,兴奋的人则可能。 在群体的灵魂中,占上风的,不是对自由的追求,而是当奴才的欲望。 领袖的动员手段:断言,重复和感染。 传染的威力很大,不但能迫使个人接受某些意见,而且能让他接受一些感情模式。 名望是某个人,某本著作,或是某种观念对我们头脑的支配力。会麻痹我们的批判能力。让我们充满惊奇和敬畏。名望的特点就是阻止我们看到事物的本来面目。 用一时的意见影响群众的头脑不难,想让一种信念在其中长久扎根却极为不易。 一种信念开始衰亡的确切时刻很容易辨认-他的价值开始受到质疑。不过即使已经摇摇欲坠,根据他建立的制度依然会保持其力量,消失的十分缓慢 需要一种普遍信念来支持一个国家。实干家一心要让这种普遍接受的信仰变成现实,立法者一心想把他付诸实行,哲学家,艺术家和文人全都醉心于如何以各种不同的方式表现他。 今天的社会主义信念虽然有明显的破绽,但并没有阻止他赢得群众。他的力量的增长只能到他获得胜利,掌权的那一天为止。 报纸媒体不断把对联意见带给人们,由于受到对立意见的暗示作用的破坏,结果任何意见都难以普及,他们全都成了过眼烟云。一种意见还没来得及被足够多的人接受。就已经寿终正寝。 报业既然成了仅仅提供信息的部门,也就放弃了让人接受某种观念或学说的努力。 如果有什么事情能够推迟一种文明的毁灭的话,那就是极不稳定的群众意见,以及他们对一切普遍信仰的麻木不仁。 两类群体:异质性,街头,议会。同质性,派别,身份 杰出律师的主要用心在于,打动陪审团的感情,不需要太多论证,留心他们,得出自己的结论,确定那些人赞同,转向不赞同的人。 选民群体属于异质性群体,他们极少推理,没有批判精神,轻信,易怒而且头脑简单。 选民的心理和其他群体一样:既不更好,也不更差。 文明是少数智力超常的人的产物,他们构成了金字塔的顶点,随着金字塔各个层次加宽,智力越来越少,如果一个伟大的文明仅仅以人多势众自夸的低劣成员的选票。是无法让人放心的。 领袖的影响力只在很小的程度上是因为他们提出的论据,而在很大程度上来自他们的名望,一旦他们不知道什么原因威信扫地,他们的影响力也将随之消失。 在政治集会中,才华横溢者无任何作用。伟大的民众领袖头脑的狭隘令人瞠目 演讲者演说的成功与否很大程度上也取决于自己的名望。 由法律专家制定的法律是最好的法律,因为他是个人的产物,只有当一系列修正案把他们变成集体努力的产物的时候,才可能产生灾难性的后果。 表面自由的增加,必然伴随着真正自由的减少。 各国被一种谬见所蒙蔽,就是认为保障自由与平等的最好办法就是制定法律,结果使人变成奴才。 人们似乎热爱自由,其实只是痛恨主子 -托克维尔。

2012-05-11 · 1 min · bystander

C++回调函数

 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。 也就是说,回调函数它首先是一个函数,然后有一个指针指向它(该指针称为函数指针),在别的代码块中,通过这个函数指针调用了这个函数,仅此而已。 下面给出一个例子,我写出了比较详细的注释。希望足够清晰。这个例子说明了,回调函数可以把调用者和被调用者分开,对于调用者来说,只需要知道自己要调用一个函数,该函数有一个string类型的参数,至于具体调用哪个,被调用的函数到底怎么执行,怎么解释该参数,是完全不用关心的。 #include #include using namespace std; typedef void (*PF)(string s); //定义一个名为PF的函数指针,该指针指向一类函数,该类函数有一个string类型的参数,返回值为void。 void funcOne(string s) //回调函数1 { cout << s+" One"<< endl; } void funcTwo(string s) //回调函数2 { cout << s+" Two"<< endl; } void caller( PF pf, string s) //调用函数 { cout << "I am Caller Function" << endl; pf(s); } int main() { string str = "Test CallBack Function"; PF pf1 = funcOne; //实例化一个函数指针,指向func函数 caller(pf1, str); pf1=funcTwo; caller(pf1, str); system("pause"); return 0; } 回调函数的一个很实用的例子就是泛型算法中的max算法,具体可以参见本文末尾的第一篇参考文档, 如果你在自行写代码中发生了 error C2679: 二进制“«”: 没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换)错误 说明你没有把string头文件导入,导入即可 个人能力有限,错误之处请留言指正,不胜感激。 参考: http://learn.akae.cn/media/ch24s05.html http://baike.baidu.com/view/414773.htm

2012-05-09 · 1 min · bystander

windows下vim闪烁问题

 今天打开我的vim才发现,界面隔几秒会闪烁。虽说貌似能够起到防止眼睛疲劳的效果,但我实在是hold不住啊。不行,搜索。。 首先有这个问题的人不多。首先找到了这篇文章,但是作者不知道怎么想的。只说了原因,没有给出解决方法。继续搜索关键字cursorcolumn,结果找到了这篇文章,按着说明来了一下 set cursorline cursorcolumn 没效果。依然闪烁。 好吧。如果是插件的问题。于是我删掉了所有的插件包括写入的配置。依然不行。于是还是采用排除法,一行行删掉配置文件。最后定位到 set guifont=Arial_monospaced_for_SAP:h9:cANSI 这是设置字体的,不太明白为什么会出现这样的情况。怀疑是字体的原因,于是换个字体,依然闪烁。。好吧。就这样吧。删掉算了。

2012-05-07 · 1 min · bystander

.Net三层架构

本文来源:http://www.cnblogs.com/gaoweipeng/archive/2009/01/18/1377855.html 老规矩。因为是非常不错的文章。所有有必要收藏下来备用。推荐。 **三层体系结构的概念 ** 用户界面表示层(USL) 业务逻辑层(BLL) 数据访问层(DAL) BLL将USL与DAL隔开了,并且加入了业务规则 各层的作用 1:数据数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务. 2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。 3:表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx, 如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。 具体的区分方法 1:数据数据访问层:主要看你的数据层里面有没有包含逻辑处理,实际上他的各个函数主要完成各个对数据文件的操作。而不必管其他操作。 2:业务逻辑层:主要负责对数据层的操作。也就是说把一些数据层的操作进行组合。 3:表示层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。 三层结构解释 所谓三层体系结构,是在客户端与数据库之间加入了一个中间层,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。 三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交换. 开发人员可以将应用的商业逻辑放在中间层应用服务器上,把应用的业务逻辑与用户界面分开。在保证客户端功能的前提下,为用户提供一个简洁的界面。这意味着如果需要修改应用程序代码,只需要对中间层应用服务器进行修改,而不用修改成千上万的客户端应用程序。从而使开发人员可以专注于应用系统核心业务逻辑的分析、设计和开发,简化了应用系统的开发、更新和升级工作。 那么为什么要应用“中间业务层”呢?举些例子: 我们假设有一段登录代码,则可以这样处理Web程序,外观层负责接收前台页面的数据,然后传给中间层,中间层对数据进行处理,比如格式化,防SQL注入等等一些,这样的数据再传给数据访问层然后与数据库进行操作,比如与数据库的用户名和密码匹配等等一些代码。** ** “中间业务层”的用途有很多,例如:验证用户输入数据、缓存从数据库中读取的数据等等……但是,“中间业务层”的实际目的是将“数据访问层”的最基础的存储逻辑组合起来,形成一种业务规则。例如:“在一个购物网站中有这样的一个规则:在该网站第一次购物的用户,系统为其自动注册”。这样的业务逻辑放在中间层最合适: 在“数据访问层”中,最好不要出现任何“业务逻辑”!也就是说,要保证“数据访问层”的中的函数功能的原子性!即最小性和不可再分。“数据访问层”只管负责存储或读取数据就可以了。 ** ** ASP.NET中的三层结构说明 完善的三层结构的要求是:**修改表现层而不用修改逻辑层,修改逻辑层而不用修改数据层。**否则你的应用是不是多层结构,或者说是层结构的划分和组织上是不是有问题就很难说.不同的应用有不同的理解,这只是一个概念的问题. * **理解ASP.NET中的三层结构**——为什么要分三层? 我们用三层结构主要是使项目结构更清楚,分工更明确,有利于后期的维护和升级。它未必会提升性能,因为当子程序模块未执行结束时,主程序模块只能处于等待状态。这说明将应用程序划分层次,会带来其执行速度上的一些损失。但从团队开发效率角度上来讲却可以感受到大不相同的效果。 需要说明一下,三层结构不是.NET的专利,也不是专门用在数据库上的技术。它是一种更加普适的架构设计理念。 ** **此种架构**要在数据库设计上注意表之间的关系,**尽力满足主与子的关系。在功能上对用户要有一定的限制,不要表现在对于子表的删除操作一定要慎重,以免造成主表与子表的数据在逻辑上出现的主表的外键在子表中没有相对应的值。 对于表的综合查询方法是: 先对主表查询,调用主表所对应的DL。再根据主表的记录分别对每一个子表进行查询。将自表的查询结果添加的主表后,形成一个大的查询集合。 对于表的操作(增删改): 此时只对主表进行操作,调用主表对应的DL中的操作方法。 RL层是逻辑判断层,主要是对页面上传入的数据进行逻辑判断。RL层之上就是UI 如何建立一个三层体系结构解决方案 新建一个空白解决方案。然后: “添加”-“新建项目”-“其他项目”-“企业级模版项目”-“C#生成块”-“数据访问”(数据层,下简称D层) “添加”-“新建项目”-“其他项目”-“企业级模版项目”-“C#生成块”-“业务规则”(业务层,下简称C层) “添加”-“新建项目”-“其他项目”-“企业级模版项目”-“C#生成块”-“Web用户界面”(界面层,下简称U层) 右键点“解决方案”-“项目依赖项”,设置U依赖于D、C,C依赖于D。 对U添加引用D、C,对C添加引用D。 到此为止,一个三层的架子建立起来了。我上面说的很具体很“傻瓜”,知道的人觉得我废话,其实我这段时间很强烈的感觉到非常多的人其实对这个简单的过程完全不了解。虽然不反对建2个“空项目”和1个“Asp net Web应用程序项目”也可以作为3层的框架,而且相当多的人认为其实这些“企业级模板项目”其实就是个空项目,这是一个误区。没错,企业级模板项目你从解决方案资源管理器里看它是个什么也没有的,但是你可以用记事本打开项目文件,看见不同了吧??有些东西在背后,你是看不见的,不过系统已经做好了。也就是说,如果你在C层里的某个类里“using System Data SqlClineit”,或者使用一个SqlConnection对象,编译时候不会出错,但是会在“任务列表”里生成一些“策略警告”,警告你在C层里不要放应该放在D层的东西(虽然就程序来说没错,但是可读性可维护性就打了折扣)而这种功能,空项目是无法給你的。 在新TraceLWord3中,应用了“企业级模板项目”。把原来的LWordTask.cs,并放置到一个单一的项目里,项目名称为:AccessTask。解决方案中又新建了一个名称为:InterService的项目,该项目中包含一个LWordService.cs程序文件,它便是“中间业务层”程序。为了不重复命名,TraceLWord3的网站被放置到了WebUI项目中。更完整的代码,可以在CodePackage/TraceLWord3目录中找到—— **面象对象与实际的结合 ** 我们知道建桥需要砖块,应该是先准备好砖再来建桥,不过为了讲解上的顺序性和连贯性,简单性。我们先建桥,建的过程中需要砖块再现做,这样就不会多出来“桥不需要的东西”。注意在实际中,还是应该先准备砖块。 U层其实就是桥,C层是砖块,D层是原料(石头、沙子)。这也解释前面为什么U层要引用、依赖D层(而不是U对C,C对D的层次),因为桥除了需要砖头,其实也需要石头沙子。 “三层结构”的缺点 有些网友在读完这篇文章前作之后,对我提出了一些质疑,这提醒我文章至此还没有提及“三层结构”的缺点。“三层结构”这个词眼似乎一直都很热门,究其原因,或许是这种开发模式应用的比较普遍。但是“三层结构”却并不是百试百灵的“万灵药”,它也存在着缺点。下面就来说说它的缺点…… “三层结构”开发模式的一个非常明显的缺点就是其执行速度不够快。当然这个“执行速度”是相对于非分层的应用程序来说的。从文中所给出的时序图来看,也明显的暴露了这一缺点。TraceLWord1和TraceLWord2没有分层,直接调用的ADO.NET所提供的类来获取数据。但是,TraceLWord6确要经过多次调用才能获取到数据。在子程序模块程序没有返回时,主程序模块只能处于等待状态。所以在执行速度上,留言板的版本越高,排名却越靠后。“三层结构”开发模式,不适用于对执行速度要求过于苛刻的系统,例如:在线订票,在线炒股等等……它比较擅长于商业规则容易变化的系统。 “三层结构”开发模式,入门难度够高,难于理解和学习。这是对于初学程序设计的人来说的。以这种模式开发出来的软件,代码量通常要稍稍多一些。这往往会令初学者淹没在茫茫的代码之中。望之生畏,对其产生反感,也是可以理解的…… 其实,无论哪一种开发模式或方法,都是有利有弊的。不会存在一种“万用法”可以解决任何问题。所以“三层结构”这个词眼也不会是个例外!是否采用这个模式进行系统开发,要作出比较、权衡之后才可以。切忌滥用! 参与资料 MainDoc.rar (《浅谈“三层结构”原理与用意》1.30M) http://www.bincess.cn/Downloads/MainDoc.rar petshop 4.0的体系结构(只是稍微看了一下,了解一下结构) 简介:PetShop随着版本的不断更新,至现在基于.Net 2.0的PetShop4.0为止,整个设计逐渐变得成熟而优雅,而且有很多可以借鉴之处。PetShop是一个小型的项目,系统架构与代码都比较简单,却也凸现了许多颇有价值的设计与开发理念。 下载地址:[http://msdn.microsoft.com/en-us/library/aa479070.aspx](http://msdn.microsoft.com/en-us/library/aa479070.aspx) **PetShop架构设计** 三层”应用结构:数据访问层、业务逻辑层(领域层)、表示层 分层的设计的特点: 结构清晰、耦合度低 便于系统的扩展 利于开发任务同步进行 降低了一定的性能 > .Net PetShop 4.0 配置文件属性管理 > http://blog.csdn.net/fengfangfang/archive/2006/09/07/1189061.aspx > > .Net PetShop 4.0 缓存处理 > http://blog.csdn.net/fengfangfang/archive/2006/09/06/1185077.aspx > > .Net PetShop 4.0 消息处理 > [http://blog.csdn.net/fengfangfang/archive/2006/09/08/1194896.aspx](http://blog.csdn.net/fengfangfang/archive/2006/09/08/1194896.aspx) > > 每个功能都使用了工厂模式 > > 参考了Duwamish Web Search

2012-05-05 · 1 min · bystander

你会用计算器吗?

 今天早上在用windows自带的计算器转换进制的时候,看到了下图所示的按钮。MS MR之类的。 这些个按钮在简单的计算器上也有。我从小时候到现在都没搞清楚。当然也没搞过。。不学总是不会的。于是,找找资料。学会了也分享一下,英文是我猜的。。不过估计差不多 首先明确的一点是这类计算器内部有一个小的记忆芯片,可以用来存储一个数,类似于内存吧。所以M的意思就是Memory,下面先给出这几个的总体说明 “MS”,英文 Memory Store,用来存储输入栏显示的数字。 “MR”,英文 Memory Read, 再次显示调用存储的数字。 “M+”,英文 Memory Plus, 存储器里的值加上输入栏的值,结果又存入存储器 “M+”,英文 Memory Minus, 存储器里的值减去输入栏的值,结果又存入存储器 “MC”,英文 Memory Clear,用于清除存储器中的数值,默认为0 “C”, 英文 Cancel,就是全部撤销; “CE”, 英文 Cancel Error,也就是撤销错误输入。 现在来说个例子,比如我要计算1002+113因为一些计算器不支持整个式子输入。也是为了演示这些功能。我们可以这样输入, 先输入100,然后 * ,然后 2 ,按下等号,这时候输入栏变成了200,我们按下MS 或者M+,按下MS的话把200存到了存储器,而按下M+呢,因为存储器默认是0,所以就相当于0+200,存储器里就是200了。然后我们继续输入11 ,输入 +,输入3 ,按下等号,输入栏变成了33.我们按下M+,这时候输入栏并没有改变。因为M+将存储器里的200加上了33.则存储器里变成了233.我们按下MR就是读取存储器的值,这样输入栏就可以看到233了。我们就可以继续用233来运算了。MC就是清除233.恢复为0. 例如:想要9*6,如果按6按错按成5了, 按C就是从头来过, 这时就要重新按9了, 但是如果你按CE的话, 就只要输入6就行了, 不必输入前面的了。 我个人感觉M存储器就相当于一个草稿。吧计算中的一些临时值存储起来,就不用手记了。我记得我那时候有时候算值还得先把一些临时值写在纸上,后面重新输入。没文化真可怕。

2012-05-05 · 1 min · bystander

说说邮件中的抄送和密送

 一直是分不太清楚,或者说是不知道具体的应用场合,于是,今天早上查了一下资料。总算是搞清楚了 不论你是用什么邮箱服务提供商,可能是126.或是Gmail,或是Qmail。在发送邮件的时候会看到如下类似的选项 抄送的英文缩写为CC,来源于Carbon Copy,如果一份邮件需要发送给多个人阅读,只要在“抄送”或“CC”一栏填上相关人员的信箱地址即可。如果是抄送多人,同样的直接添加到抄送栏就可以了。 密送的英文缩写为BCC,来源于Blind Carbon Copy,由于某种原因或出于某种考虑,你不希望收信人知道你把这封邮件还发送给了另外的人,则可将这位幕后的人的信箱地址放在密送一栏。 具体的规则是怎么呢。如果我密送给了多个人,那么多个人会互相看到彼此吗?下面我将使用一个例子来说明 如果:A 发送邮件(To)给B1、B2,抄送(CC)给C1、C2,密送(BCC)给D1、D2。 那么: A知道自己发送邮件给了B1、B2,并且抄送给了C1、C2,密送给了D1、D2。这相当于废话。。自己肯定知道自己给谁发了。 B1知道这封是A发送给B1、B2的邮件,并且抄送给了C1、C2、但不知道密送给了D1、D2。To的人能看到抄送,看不到密送 C1知道这封是A发送给B1、B2的邮件,并且抄送给了C1、C2,但不知道密送给了D1、D2。抄送的人看不到密送。 D1知道这封是A发送给B1、B2的邮件,并且抄送给了C1、C2,而且密送给了自己,但不知道密送给了D2。 密送的人权限比较大,可以看到最多的情况,但依然看不到密送 具体的用法呢,一句话就是:一般抄送和密送是为了备份,知会,或者监督跟踪的作用。 我先举个例子。有些个朋友过节什么的喜欢群发邮件。或是一些什么网页之类的。有这个心是好的。可是。对于收到的人来说,一看到是群发的。直接可能都删掉了。所以此时可以使用密送功能。对应于上面说的最后一种情况。具体使用时在To里写上自己的地址,这样邮件会发给自己。密送栏里写上其他人的邮件,这样就同时密送给其他人,并且每个人都会只看到发给自己。起码有看下去的心情。 邮件在工作中用的非常多,美国人总结的中国人典型特征中有一条,“即使面对面坐着,也不直接交谈而要使用邮件。”而这在很多外企之中是非常流行的文化,和总部打交道,邮件往往是最快捷和便宜的方式," 说到抄送,简直是所有邮件灾难故事最有力的协助者。同事之间常有抄送行为,有时是为了工作方便,同事A同时将一封邮件抄送给B和C,只能说明他们之间需要互相协作完成一件事情,但如果A将邮件发送给了B,却抄送给了B的老板C,那意味就深远了,通常有可能的情况是,A和B在合作的过程中发生了一些不愉快,告知老板的目的只是为了给对方一些震慑,这一招在各大公司当中都屡试不爽,而且往往成为一件悬而不决的事情得到解决的最快速手段。 抄送更多时候只是手段,而不是最终目的。看到一个某人A与其他部门同事B合作时发生的插曲,在某次急需同事B提供某文件支持时,B不慌不忙地一直以各种借口拖延工作,A忍无可忍,发了一封紧急邮件,同时抄送了B部门的领导和自己的领导,在这样一封邮件下,B在十分钟之内就将所需文件以附件形式传了过来,并回复了原邮件中的所有人。 如果你看了觉得真麻烦。其实。最有效的交流就是面对面,但是在职场中这是最有效地证明你自己干过什么的工具,一旦出了什么问题,最容易发现在哪个环节出现了问题,该由谁承担什么样的责任。如果遇到打官司这样的严重情况,邮件甚至能够作为呈堂证供。 没事给朋友写写邮件,那天看到一句话:维系友情的方法之一,是冷冰冰地写邮件。频率少得可怜,常常春暖花开发的邮件,秋叶飘零时收到回复。 参考: http://www.eeo.com.cn/2012/0328/223658.shtml http://baike.soso.com/v3997479.htm http://dudo.org/archives/2007123120184.html

2012-05-03 · 1 min · bystander