Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

编程语言与自然语言(贰)

  昨天的文章把编程语言与自然语言中最关键也是最复杂的实意动词部分稍微说了下,剩下的内容比较零散,说起来可能会比较乱。如果本身就对语言没啥兴趣就无视这篇文章吧。说实话,这两篇文章看了不会对编程有啥帮助,不过对自然语言的学习倒是有点帮助。
  实意动词虽然都具有自己的词性,但是有很多词性不明确或者说同时具有多个词性的词汇,这使用一个词就会有许多用法。换成编程语言的话说就是多态(函数多载),一个函数有多种类型的参数列表就像是一个动词有多个词性。在自然语言中,我们会根据需求来判断是否需要宾语;在编程语言中,调用函数时也会根据传入的参数列表来决定函数的功能。
  比如“张三吃蘑菇了”这个例子。“吃”这个词语在这里虽然是作为及物动词,但是他同时存在不及物动词的用法。我们也可以说“张三吃了”。如果“张三”是一个对象,“吃”是它具有的方法,那么这个方法就存在两个功能。一种是需要指定吃的是什么,另一种不需要参数。写成“zhangsan.eat(mushroom)”和“zhangsan.eat()”。
  动词中还有很多主观动词,这一类动词在编程语言中就比较少了。因为程序的逻辑是建立在客观上的,不适合引入主观的概念。除非开发一些AI之类的东西也许会用到。比如“惊恐”,一个普通程序中的对象怎么可能有“惊恐”这种方法呢,具有这种方法的无非就是AI。游戏中的NPC呀什么的可以表示出“惊恐”这种东西。而且这一类动词基本上都很简单,一般不需要参数。即使需要参数也只是个副词或形容词什么的,用来表示这个动作的程度。
  既然说到形容词和副词了,我们也需要了解一些他们在程序中的作用。这一类词汇一般作为常量,直接定义好的。比如“张三的内裤是红色的”就是直接给对象定义上这个属性。而“红色的”就是一个常量。在程序中可以写作“zhangsan.briefs.color=RED”。这类词汇的用途仅此而已。但是,虽然他们是常量,但是常量未必是它们,任何词汇都可以作为常量。比如上面这个使用属性的写法也可以换做使用方法来写“zhangsan.setAttribute(BRIEFS_COLOR,RED)”,这种写法也是很常见的。
  除了这些,还有一些系动词、助动词也比较常用。比如“是”、“有”,他们通常和其它词汇连用的。比如“isHuman”、“isLoading”、“isBusy”、“hasAttribute”,等。这些东西可作为属性,也可以作为方法,因为他们只是判断某种信息,不需要参数,而且只有一个布尔返回值。其实,这类词语本身就是用来增加语言的逻辑性的,if、else这些词汇也是属于这一类的,程序本身是需要高度缜密的逻辑,所以在程序中,逻辑控制的工作由保留字(固有语句)或符号(运算符)来强制执行,不会把逻辑散落到词汇的命名中,所以词汇的逻辑性就显得不太重要。前面的那几个例子我们也可以写作“loading”和“busy”,这不会对程序本身有什么影响,但是开发者之间就需要好好协调了,这关系到命名规则的问题。
  另外,还有一类词语是在编程中很少用的,那就是情态动词。情态动词的功能是描述句子的主客观性,而程序中都是客观没有主观,所以他们用不上。比如“能”和“会”,程序中只有“能”没有“会”的概念。当然和上面的主观动词一样,AI开发的情况确实会用到这些,不过我觉得把它当作特例比较好。其实“can”在程序中都很少用的,因为动词的可能态可以描述。比如通常会用“editable”而不是“canEdit”。
  自然语言与编程语言的话题也太大了,搞的我现在脑子都有点混乱了,再写下去就要奔溃了。以后找个机会再重新整理下这些东西。
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^