《像计算机科学家一样思考C++》——1.4 形式语言和自然语言-阿里云开发者社区

开发者社区> 人工智能> 正文
登录阅读全文

《像计算机科学家一样思考C++》——1.4 形式语言和自然语言

简介:

本节书摘来自异步社区出版社《像计算机科学家一样思考C++》一书中的第1章,第1.4节,作者: 【美】Allen B. Downey , ,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 形式语言和自然语言

像计算机科学家一样思考C++
自然语言是指人类表达的语言,比如,英语、西班牙语和法语。自然语言不是由人类设计(尽管人类尝试对其强加某些命令)的,而是通过自然演化的。

形式语言则是由人类为了某些特殊应用而设计的语言。例如,数学中使用的记号法就是一种特别擅长表示数字和符号间关系的形式语言。化学家使用某种形式语言来表示分子间的化学结构。而最重要的是:

编程语言是用于表达计算过程的形式语言。

正如我之前提到的,形式语言具有严格的语法规则。例如,3+3=6是一个语法正确的数学表达式,但是3=+6$就不是。同样,H2O是一个语法正确的化学名词,但是2Zz就不是。

语法规则有两种:与标识有关的规则或者与结构有关的规则。标识是语言的基本元素,如单词、数字以及化学元素。3=+6$的问题之一是$不是数学里合法的标识(至少据我所知是这样)。类似地,因为化学里没有缩写为Zz的元素,所以2Zz也是不合法的。

第二种语法错误是表达式结构的问题。所谓结构,就是标识的顺序。表达式3=+6$在结构上就不合法,因为不能在等号之后直接使用加号。类似地,分子表达式需要在元素名之后添加下标而不是之前。

当你阅读一句英文或者形式语言的一条语句,你需要找到它的结构(尽管这一行为在阅读自然语言时是无意识的)。这一过程称为语法分析。

举个例子,当你听到一句话:“另一只鞋掉了,”你会知道“另一只鞋”是主语而“掉”是动词。一旦你解析了一个句子的语法,你会了解它是什么意思,就是句子的语义。假设你知道鞋是什么意思和掉了是什么意思,你就会明白这句话的大致含义。

尽管形式语言和自然语言有很多共同的特性,但是他们在标识、结构、语法以及语义上有很多不同。

二义性:自然语言充满了二义性,需要人们根据上下文线索和其他信息理解。而形式语言几乎没有二义性,即形式语言的任何表达式都仅有一个含义,无关上下文。

冗余性:为了弥补歧义和减少误解,自然语言引入了很多冗余,结果自然语言通常都很啰嗦。形式语言则更简明扼要。

文学性:在自然语言中有很多习语和暗喻。如果我说另一只鞋掉了,很有可能指的不是鞋,也没有什么东西掉了。而形式语言则精确地描述了它们表达的意思。

习惯于自然语言的人们(每个人)要适应形式语言通常都很艰难。在某些方面形式语言和自然语言的差别就像是诗歌和散文,但是更甚。

诗歌:词汇的发音和意义都十分重要,而整首诗歌创造某种效果或者情感回应。诗歌中随处可见精心设计的双关语。

散文:相较于诗歌,散文中文字本身的含义更为重要,同时结构也具有更大的意义。散文虽然也有二义性,但是比诗歌容易分析。

程序:计算机程序的含义是纯字面且无歧义的,并且可以通过分析标识和结构将其完整理解。

关于阅读程序(还有其他一些形式语言)的几条建议如下。首先,形式语言比自然语言难以理解得多,需要花费更长时间来阅读。其次,形式语言的结构很重要。所以从头到尾的完整阅读并不是一个好方法。应该学会先将程序解析,识别标识和解释结构。最后,记住细节决定成败。像自然语言中无关大碍的错误拼写和标点符号等,在形式语言中可能产生很大的影响。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章
最新文章
相关文章