Moh*_*hit -1 language-agnostic nlp programming-languages
自然语言(如英语和法语)与C++和Perl等编程语言之间的主要区别是什么?
我对模糊性问题很熟悉,但不能使用交互式编译器或使用严格语法使用自然语言的子集来解决这个问题,但是所有时间仍然保留了语言的本质?
另一个问题是背景.但律师有办法解决这个问题.(这个问题不是关于降低编程的复杂性,而是关于使用自然语言指导计算机的简明理由和障碍.)
除了这两个之外还有其他重大问题吗?或者这两个比我上面提到的更大的后果?交互式解决方案和律师语言在技术上是否不适合编程?
这是一个非常有趣的问题,简而言之,是的,为什么我们不使用英语来编写程序有一些很好的理由.
之前曾说过,计算机科学给我们的最大礼物不是与计算机交谈的能力,但现在用于描述算法的正式语言我们现在拥有更好的工具来将这些想法传达给其他人.即使没有涉及计算机.事实上,最好的软件工程师将他们的工作主要看作是编写其他人可读的软件,以便尽可能简化维护和添加新功能.对于像任何自然语言一样大而自由的语言来说,这是不可能的.
一个原因是含糊不清.你有没有看过餐厅的菜单,看到你的汉堡你可以得到"凉拌卷心菜和薯条或沙拉"?这是什么意思?我可以同时获得凉拌卷心菜和薯条,或者另一种选择是沙拉吗?或者我总是得到凉拌卷心菜,我必须在薯条或沙拉之间做出选择?英语充满了这些东西.
我曾经教过这个课程,我喜欢用来解释歧义的例子如下.我让学生们写了一段以"汤姆问克里斯是否可以帮助他"的句子结尾的故事.大约有一半时间写的故事表明学生将这句话解释为汤姆要求克里斯提供帮助.另一半时间人们认为汤姆提出借给克里斯一只手.
如果你考虑一下,有很多人用英语写程序.他们被称为产品经理,他们使用的编译器是软件工程师.这里的问题是软件工程师必须注入他自己对问题的许多理解,才能理解描述的真正含义.相信我,有很多来回.即使是非常简单的业务要求,我也必须澄清含糊之处.
我不同意律师有办法解决背景问题.在某些情况下,我们不断在法庭上持续争论一些受过最多教育的人,关于各种法律的含义.有时,这涉及争论很久以前法律的背景.有时涉及将其应用于以前不存在的新上下文,如Internet.我们有成千上万的律师致力于消除这些问题的歧义,这一事实证明它无法通过像编译器这样的简单计算机程序来处理.问题太难了.
另一个问题是简洁的能力.数学很久以前就为数学中的许多不同概念发明了符号,因为如果有一种简洁且具有明确定义的特殊语法,它就更容易阅读.当我说"f(x)= 3x + 1"时,数学家知道它意味着什么.它意味着同样的事情:"有一个名为f的函数,它有一个参数.将f应用于数字的值是给定数字的三倍多的数字." 但是,一旦学会了语法,前者就会更容易阅读.编程语言也是如此.编程语言专门用于描述计算.
编程语言的创建者故意创建非常小的语言.事实上,这些是英语的子集,还有一些额外的语法.以所有自由形式理解所有英语的想法,更糟糕的是,增加词汇量是自然语言处理(NPL)的工作.一份非常艰苦的工作.如果您希望能够为程序指定明确的含义并且程序的行为永远不会改变,那么您需要一个定义良好的语法和语义.
这里的外卖点是,英语是一种非常大,非常灵活的语言,没有正式的规范.编程语言需要具有明确定义的语法和语义,以使算法具有明确且不变的含义.事实上,有人可以为英语子集编写正式的语法,并赋予其明确的含义.但这将是一项庞大而巨大的工作.
查看BabelBuster.这里的想法是采用C并将其转换为非常严格的英语的一小部分,以便可以用C编写程序然后将其转换为英语.在DeCSS DVD解密论证期间,MPAA试图获得可以解密其DVD被宣布为非法的程序.BabelBuster以一个非常有趣的想法进行了反击.创建一种方法将英语转换为C语言中的工作代码,从而将C语言自由保护,从而使C代码也只是一种应该受到保护的语言.因此,应该能够发布破坏DeCSS的代码.无论您在哪一方,这都是与您的问题相关的有趣工作.
BabelBuster的问题在于你需要用非常非常有限的英语子集编写你的程序.但是有可能做到这一点.
与所有自然语言一样,英语允许我们描述计算或算法,但语言冗长,提供多种说法相同的方式,取决于说话者的上下文,而不是正式指定.如果你的目标是描述计算,你应该选择英语,选择一个最小的可行子集,你可以在其中说出你需要的一切.正式指定此子集中的每个单词的含义.然后创建一些特殊的符号,使其简洁,像数学一样说出你说的话.如果你这样做,你会这样做,你会得到一个典型的编程语言,或类似的东西.