优达菌:文言文可以编程吗?近日一位卡内基梅隆大学(CMU)大四学生因开发基于文言文的编程语言小火了一把。截止本文发布前,排名 Github 项目周趋势第三(前两个是春运抢票相关)。懂编程又懂文言文,如此文理两开花,今年的年度最秀编程语言优达菌决定私自颁给文言编程了。
本文由机器之心原创,已授权转载,禁止二次转载。
![7fbb00a63447de4f81cc3a88cdaf5991.png](https://img-blog.csdnimg.cn/img_convert/7fbb00a63447de4f81cc3a88cdaf5991.png)
「昔者苍颉作书,而天雨粟,鬼夜哭」,汉字的出现,诞生了世界上一个伟大的文明。而编程语言的出现,让人类和计算机产生了真正的联系,推动了现代文明的发展。
那么,将古代汉语和编程语言结合又会产生怎样的火花?最近,GitHub 上出现了一个文言文做代码的项目,几乎是世界上第一门文言文编程语言(当然,底层还是转换成 Python 或 JavaScript 运行)。
![20317438cde094abdebd0e92e7d1bbbd.png](https://img-blog.csdnimg.cn/img_convert/20317438cde094abdebd0e92e7d1bbbd.png)
![4927bb658ec80a074610648a78921612.png](https://img-blog.csdnimg.cn/img_convert/4927bb658ec80a074610648a78921612.png)
(注:传仓颉造字后,鬼神啼哭,天降粟雨)
但以往从未有人使用过文言文进行编程。这并不是传承文脉、保护文心的好方法,所以我才产生了用文言文编程的想法。我目前还太年轻,读过的书也没有破万卷。如今身处遥远的国家(美国),也很久没有接触中文了。但是我一直对文学很有兴趣,编写的程序有时候也得到人们的一些肯定。正如王希孟和庄子一般,并不因为年轻或者知识的浩瀚无涯而退缩,于是写下了这些话。
(注:王希孟,北宋画家,18岁画成传世名作《千里江山图》)
我既没有像李贺那样呕心沥血,也没有像李商隐那样口角流沫(形容读书勤奋)。项目完成后,我将继续以干将铸剑的精神勉励自己,带着越王卧薪尝胆的精神继续向前。我自己虽想效仿《算经十书》的笔法,只是遗憾没有唐宋八大家那样淋漓的文笔。正如庾信在《哀江南赋》所写:「陆机听了心甘情愿地拍掌;张衡见了将轻视它也是理所当然」(意指如果被人嘲笑,也是理所当然,我不会太过介意)。
尽管这项目只有覆瓮的价值(一点微小的工作),但是还有完善的空间。虽然没有像吕不韦那样有一字千金的本钱,但是我对交流的渴望是一样的。
这也正是开源的精神内核,我们以此互相勉励吧。
作者是谁? Lingdong Huang 目前是 CMU 计算机专业大四学生,明年就本科毕业了。我们可以看到他曾在迪士尼研究实验室、纽约时报等大厂实习过。而且从个人网站中,很明显可以发现他高中就开始做各种小项目,包括视觉和自然语言的都有。 写得了代码、读得了文言文,文化底蕴还这么强,现在的本科生已经这么厉害了。![47ec79bfd38c8211302fba750119393b.png](https://img-blog.csdnimg.cn/img_convert/47ec79bfd38c8211302fba750119393b.png)
吾有一數。曰三。名之曰「甲」。
為是「甲」遍。
吾有一言。曰「「問天地好在。」」。書之。
云云。
具体而言,先定义一个数「3」,并命名为「甲」,现在循环「甲」次,每次在屏幕上打印出「問天地好在。」。作者会将其翻译成对应的 Javascript 代码,从而帮助我们理解。
var n = 3;
for (var i = 0; i console.log("問天地好在");
}
当然,按照我们的习惯,改写成 Python 代码也是没问题的:
a = 3
for i in range(a):
print("問天地好在")
为了更贴近文言文的表达习惯,Lingdong Huang 在项目表示各种标点和换行都是可以去掉的,上面的文言文代码可以等价写为:
吾有一數曰三名之曰「甲」為是「甲」遍吾有一言曰「「問天地好在」」書之云云
突然感觉,好像没了符号的文言文代码更容易懂了?
这样看起来似乎很简单?那你就小瞧了文言文编程的魅力。比如说程序员入门必修课「斐波那契数列」,每一项都是前两项的和,第一项是 0、第二项是 0+1、第三项是 1+1 等等。
![6362b5dde719b576ce6820e3bcb66602.png](https://img-blog.csdnimg.cn/img_convert/6362b5dde719b576ce6820e3bcb66602.png)
![a4aa5889387d430a74afcc52ba7560a4.png](https://img-blog.csdnimg.cn/img_convert/a4aa5889387d430a74afcc52ba7560a4.png)
def fei_seq(yin):
tou = 0
wei = 1
ji = 1
guo = 0
if yin == 0:
guo = yin
if yin == 1:
guo = yin
while True:
if ji >= yin:
break
ans_ = tou +wei
guo = ans_
tou = wei
wei = guo
ans_ = ji + 1
ji = ans_
return guo
print(fei_seq(7))
当然,Python 作为一种极其精简的语言,真正用它来写斐波那契数列肯定代码量要少很多。不过,借助这段翻译,理解文言文编程还是要简单很多的。如果读者想要试一试,可以复制这个 GitHub 项目,并在本地编译,也可以直接使用在线 IDE 编译你的代码。
下面,作为一种「新语言」,我们当然要了解它的神奇语法,不论是定义变量、函数,还是生成数列,文言文都有对应的语法。
■
语法规则
考虑到文言文和其他编程语言的转换有一定的理解难度,作者提供了一些语法转换规则表,供参考。
变量命名
![b654d490f60eeeb55ae80162987665c5.png](https://img-blog.csdnimg.cn/img_convert/b654d490f60eeeb55ae80162987665c5.png)
![a72613c3a7dfc7806e56f50967689c34.png](https://img-blog.csdnimg.cn/img_convert/a72613c3a7dfc7806e56f50967689c34.png)
![e7cf1040c216ee8e93867df0eb84eb95.png](https://img-blog.csdnimg.cn/img_convert/e7cf1040c216ee8e93867df0eb84eb95.png)
![78020b10684ad938603d1f316df07ee2.png](https://img-blog.csdnimg.cn/img_convert/78020b10684ad938603d1f316df07ee2.png)
![2ac714f93be49b2fd56cc1ed4abdca65.png](https://img-blog.csdnimg.cn/img_convert/2ac714f93be49b2fd56cc1ed4abdca65.png)
![67061fbddd60e53048e865f2b71696b8.png](https://img-blog.csdnimg.cn/img_convert/67061fbddd60e53048e865f2b71696b8.png)
你不需要万事俱备才能行动,但只要开始改变就是成功的一半。
距离 2020 年仅剩 3 天!与优达学城约定 2020 新年学习计划,赢 600 - 1000 元的奖学金,升级新年行动力,让计划不落空,终结每年 Flag。
- 申请方式 -
扫码关注「优达学习助手」
填写并提交表单,申请结果将在 48 小时内通知
点击阅读原文,去奖学金页面了解更多内容