Rab*_*Rab 5 nlp programming-languages
看看,例如AppleScript(还有很多其他人,有些人肯定相当不错)宣传他们对自然语言隐喻的使用.他们说,代码显然更具可读性,因为它可以/意图用类似英语的句子构建.我敢肯定,有些人比只使用英语句子编程更好.但是,我对一种语言的可行性表示怀疑,这种语言过于宽泛(除了利基案例).
那么,在一定的合理点之后,自然语言是一种利益还是一种错误?如果概念被推向极端会怎样 - 代码必然更具可读性吗?或者它可能是不必要的长,难以使用,并且就像在混淆的Perl,混淆的C和扭曲眼睛的Bash脚本logorrhea的规模上产生欢闹一样?
我知道一些像"告知"这样几乎都是纯英语的专业案例,但这些案例有一个他们不太可能冒险的利基.我听到并读到有关代码阅读更像英语句子会有多棒,但有没有讨论可能存在的缺点?如果日常语言如此清晰,简洁,干净,可爱,简洁,易懂,为什么我们首先要创造数学符号?
用自然语言准确精确地描述复杂指令对于机器是否真的更容易,或者更接近数学标记是更好的选择?那条线应该画在哪里?最后,您是否被那些被吹捧为类似英语句子的语言所吸引?整个问题应该只是一个问题:
naturalLanguage > computerishLanguage ? booAndHiss : cheerLoudly;
Run Code Online (Sandbox Code Playgroud)
我对此的回答是,理想的编程语言介于自然语言和非常正式的语言之间.
在一个极端,有正式的,最小的数学语言.以Brainfuck为例:
,>++++++[<-------->-],[<+>-]<. // according to Wikipedia, this means addition
Run Code Online (Sandbox Code Playgroud)
或者,对于上述混乱,任何类型的lambda演算都有些优先.
?fxy.x
?fxy.y
Run Code Online (Sandbox Code Playgroud)
这是在lambda演算中表达布尔真值的一种可能方式.看起来不是很整洁,尤其是当你围绕它们构建逻辑运算符(例如,AND
例如?pq.pqp
)时.
我声称大多数人都不能用这种简约,难以掌握的语言编写生产代码.
另一方面的问题,即人类所说的自然语言,是指具有过多复杂性和灵活性的语言,使程序员能够表达对今天的计算机毫无意义的模糊和不确定的事物.我们来看看这个示例程序:
MAYBE IT WILL RAIN CATS AND DOGS LATER ON. WOULD YOU LIKE THIS, DEAR COMPUTER?
IF SO, PRINT "HELLO" ON THE SCREEN.
IF YOU HATE RAIN MORE THAN GEORGE DOES, PRINT SOME VAGUE GARBAGE INSTEAD.
(IN THE LATTER CASE, IT IS UP TO YOU WHERE YOU OUTPUT THAT GARBAGE.)
Run Code Online (Sandbox Code Playgroud)
现在这是一个模糊的明显案例.但有时你会因为更合理的自然语言程序而犯错误,例如:
READ AN INTEGER NUMBER FROM THE TERMINAL.
READ ANOTHER INTEGER NUMBER FROM THE TERMINAL.
IF IT IS LARGER THAN ZERO, PRINT AN ERROR.
Run Code Online (Sandbox Code Playgroud)
哪个号码是IT
指?应该打印什么样的错误(你忘了指定它.) - 你必须非常小心地明确你的意思.
对其他人进行误解已经太容易了.您如何期望计算机做得更好?
因此,计算机语言的语法和语法必须足够严格,以使其不允许含糊不清.声明必须以确定的方式进行评估.(可能有一些极端情况;我在这里谈论一般情况.)
我个人更喜欢使用非常有限的关键字的语言.您可以快速学习这样的语言,并且您不必在10,000种方法中选择实现一个目标,因为有10,000个关键字用于执行相同的操作(如:GO
/ WALK
/ RUN
/ TROD
/ SLEEPWALK
/等TO THE FRIDGE AND GET ME A BEER!
).这意味着如果你需要考虑10,000种不同的做事方式,那将不是由于语言,而是由于有9,999种愚蠢的方法可以做到这一点,而且1种优雅的解决方案只是比所有方式都闪耀其他.
请注意,我以大写形式编写了所有自然语言示例.那是因为在我写这篇文章的过程中,我考虑过很好的旧GW-BASIC和COBOL.有一些编程语言的例子依赖于自然语言,我认为历史表明它们通常比简洁的C风格语言更不普遍.