当前位置:  开发笔记 > 编程语言 > 正文

使用"自然"语言编写代码会更好吗?

如何解决《使用"自然"语言编写代码会更好吗?》经验,为你挑选了4个好方法。

我最近看到了一种名为supernova的编程语言,他们在网页上说:

超新星编程语言是一种现代脚本语言

第一部分介绍使用直接小说描述编程的概念

清晰的纯人类语言子集.

你可以编写如下代码:

i want window and the window title is Hello World.
i want button and button caption is Close.
and button name is btn1.

btn1 mouse click. instructions are
   you close window
end of instructions

我的问题不是关于语言本身,而是我们需要这样的语言,他们是否更容易编写代码?



1> Gordon Gusta..:

代码可能看起来像自然语言,但它实际上只是具有不同关键字的常规计算机代码.在你的例子中,I want可能是同义词new.这并不是说你可以直接使用自然语言make me a window而是说(如果可以的话,事情会变得更加丑陋......).

让我们仔细看看你的代码和语言含义:

i want window and the window title is Hello World. 

i want表示new,and表示参数列表的开头.在要创建的对象上the is设置实例变量member_name.请注意,您必须写type_name两次.

i want button and button caption is Close.
and button name is btn1.

.结束声明.但是,您可以通过启动下一个语句来"链接"对象的方法调用and.另外,如何引用名为变量Close而不是字符串的变量"Close"?哎呀,我们甚至用普通英语来解决这个问题:"说出你的名字"和"说出你的名字"之间的区别是什么?

btn1 mouse click. instructions are
   you close window
end of instructions

mouse click是一个包含空格的标识符,应该是mouseClick.instructions are定义一个lambda(参见isvs. are关键字混淆造成麻烦吗?).you close window电话window.close().end of instructions是一个lambda的结尾.所有这些都比他们需要的更长.

还记得吗?这些只是我对语法的猜测,这可能是完全错误的.看起来还很简单?如果是这样,尝试编写一个更大的程序而不破坏任何这些规则,以及您需要的其他规则来定义条件逻辑,循环,类,泛型,继承或其他任何您需要的东西.您所做的只是将常规编程语言中的符号更改为"自然语言"等价物,这些等价物难以记忆,不必要的冗长和更模糊.


试试这个翻译:

var myWindow = new Window( title="Hello World" );
myWindow.addButton( new Button( caption="Close", name="btn1" ) );

btn1.onMouseClick = function() {
    myWindow.close();
}

看看每一行如何映射到前一个示例中的对应部分,但更直接地说明了意图?自然语言可能有利于人类执行,但是对于精确的规范来说,它非常难以使用.

你越努力让英语轻松而清晰地传达这些想法,它就越像我们已经拥有的编程语言.简而言之,编程语言尽可能接近自然语言,而不会失去清晰度和简洁性.:d


当然,你的翻译神奇地拉出了按钮应该在窗口中的事实.完全没有说明(虽然我相信是正确的).这是用自然语言编程的*真正问题之一:有大量未说明的假设完全改变了应该发生的事情.我会慈善,称之为"棘手的人工智能挑战"......

2> Donal Fellow..:

由于编程的基本困难是让你的想法足以告诉计算机该做什么,使语言更"自然"是非常不可能让非程序员更容易理解; 语言本身从来就不是真正的问题.更重要的是,所有自然语言的混乱都无助于任何程序员(值得一提)他们正在做的事情,为什么要添加呢?

或者我们可以拥有一种真正的自然语言编程语言,包括"嗯","呃"和"哦,我真的不知道"?:-)


您提到的自然编程语言是客户用来向程序员表达意图的语言.它保留的关键短语包括"自动化我们的过程","满足所有要求"和"提高生产力".这些可以或可以不与具体对象结合使用以进一步描述意图.在大多数情况下,它被用作查询语言,最终函数评估"这将花费多少?" 或者"需要多长时间?" 在某些情况下,省略查询并使用断言,例如"这必须在两个月内完成".

3> Wildcat..:

Edsger W. Dijkstra,关于"自然语言程序设计"的愚蠢.我没有什么可补充的.



4> lamas..:

您在上面向我们展示的编程语言非常冗长(因为它似乎比COBOL更多).

这带来了几个问题:

做简单的事需要很长的代码.

代码变得难以维护

找出代码的作用需要很长时间

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有