名字="李诗情";printf("%s,%s\n",甲->名字,乙->名字);目标是自_自然语言编程">
当前位置:   article > 正文

自然语言编程的尝试

自然语言编程
班上有30个学生
甲叫肖鹤云,乙叫李诗情
显示甲、乙的名字
  • 1
  • 2
  • 3

这段代码明显不能运行,需要做一些修改。

分配30个学生类至班
甲为班[0],乙为班[1]
甲的名字为肖鹤云,乙的名字为李诗情
显示甲的名字,乙的名字
  • 1
  • 2
  • 3
  • 4

进一步转化:

学生类* 班=(学生类*)malloc(30*sizeof(学生类));
学生类* 甲=&班[0], *乙=&班[1];
甲->名字="肖鹤云",乙->名字="李诗情";
printf("%s,%s\n",甲->名字,乙->名字);
  • 1
  • 2
  • 3
  • 4

目标是自然语言编程,需要用到哪些特性呢?
♥第一个被发现的特性,叫“滞后赋值”,即先说业务逻辑,后解释变量。如:

甲叫肖鹤云,乙叫李诗情
甲为班[0],乙为班[1]
  • 1
  • 2

在所有计算机语言中,都必须先声明甲、乙,再使用它们。然而在自然语言编程中,可以倒置。
♥第二个被发现的特性,叫“推断类型”,即通过上下文,推断变量的类型。上面的例子中,通过推断类型,知道甲、乙是学生类。
♥第三个被发现的特性,叫“去动词化”。按照面向过程编程的逻辑,应该说“分配30个学生类至班”,把这个动词短语名词化之后,成为“班上有30个学生”。
♥第四个被发现的特性,叫“饱和记忆”,如,把“甲的名字为肖鹤云”变成“甲叫肖鹤云”,这需要计算机里存储着常见用法,才能实现。这一特性通过研究编译原理难以实现,关键是要记住。
♥第五个被发现的特性,叫“概念混淆”,如“乙的名字为李诗情”中的“为”,对应到C语言里还有a.b和a->b的区别。在自然语言编程中,这些概念混淆了,或者理解成计算机语言太细致了。
♥第六个被发现的特性,叫“冗余择优”,在“班上有30个学生”这一句中,是班上、班内、班里、班中?语法应该保留一些冗余,让程序员选择出更优的句子。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/437502
推荐阅读
相关标签
  

闽ICP备14008679号