自然语言编程的尝试

班上有30个学生
甲叫肖鹤云,乙叫李诗情
显示甲、乙的名字

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

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

进一步转化:

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值