http://music.163.com/album/1603461
编程语言
人们对程序员的定义就是“能够使用编程语言达成预期目的的职业”。并且,计算机科学研究中非常神奇的一点就在于99%的研究成果可以直接用编程语言来复现。这种高效的理论-产品转化率也是计算机科学蓬勃发展的原因之一。
那么什么是编程语言?在了解编程语言之前,我们需要先知道什么是计算机科学范畴下的符号与语言。
>符号
语言由符号组成。从集合论的领域来说,我们称一个符号是它从属于的符号集Σ中的一个元素,符号集Σ是由符号组成的集合(听不懂就请先自行了解集合论基础理论)。
例如对于二进制语言来说,Σbinary={0, 1}。0与1为符号,Σbinary为二进制符号集。类似的,英语符号集包含了26个英语字母和英语标点符号。
符号集容纳了一个语言可能使用到的所有符号(文字)。一个由符号集Σ中符号构成的,任意长度排列组合叫做语句。例如,1001是二进制语言的一个语句,Rock&Roll是英语的语句。
在离散数学中,我们不是一笔一划地“写下”一个语句,而是从符号集中按顺序选择一个个符号来形成语句。
如果没有语法(grammar)限制,一个非空符号集所能构成的语句的集合Σ*中有无限个元素,并且所有只含某符号集内符号的排列组合都是该符号集的语句。但很可惜,我们有语法来规范什么语句是合法的,什么语句是非法的。
>语法
语法是任何将一个符号集中符号的排列组合分割为合法语句与非法语句的筛选规则。我们定义满足语法的语句是合法的,否则是非法的。一般来说,我们并不讨论非法的语句,除非我们想利用某种规则将其改成合法的。
例如,我们可以定义一种二进制语言的语法是必须要以1为开头,那么100是一句合法语句,而0110则不是。
语法也可以很复杂,特别是自然语言的。例如根据复杂的英语语法,I is fishes是不合法的,而Am I a fish?则是合法的。
一个语言可以有自下而上的数套语法一齐规范。例如在自然语言处理(Natural Language Processing,NLP)的理论中,英语有三重语法,分别是词义(lexical),句法(syntactic)和语义(semantic)。例如I am a waorker中含有错误拼写的词语,不符合词义语法。I a worker am并没有按主谓宾的结构排列,不符合句法。而I am a TV则在语义上没什么道理,只适合在前卫摇滚中出现。
我们想要有一种方式来系统化/自动化地判断一种符号的排列组合是否满足某语法。为此,我们发展/利用了许多理论,例如状态机(State Machine),无上下文语法(Context Free Grammar,CFG)等。利用基于诸如此类的理论所创造工具,程序可以自动判断你写的句子是否符合某种语法,甚至还能纠错。
>语言
我们定义语言为一套符号集与其对应的语法。取决于人们的需求,语言可以是二进制数字,中文,说出来的话,手语,音乐,图片,分子的理论运动轨迹(考虑到量子的离散性)等等等等,因为它们都是符号的排列组合,都可以用符号的排列组合来精准定义。
对于语言这种抽象概念的广泛存在,一些最早将前卫要素引入金属乐的人已经意识到了。音乐也可以是图片,或者文字。Images & Words.