参与:思、一鸣
「昔者苍颉作书,而天雨粟,鬼夜哭」,汉字的涌现,出身了天下上一个伟大的文明。而编程措辞的涌现,让人类和打算机产生了真正的联系,推动了当代文明的发展。那么,将古代汉语和编程措辞结合又会产生若何的火花?最近,GitHub 上涌现了一个文言文做代码的项目,险些是天下上第一门文言文编程措辞(当然,底层还是转换成 Python 或 JavaScript 运行)。
如果中文是编程措辞中利用的紧张措辞,我们中国人学习编程是否会更大略?这是知乎上谈论非常火热的话题。很多打仗过编程的人都知道「易措辞」,这是一种利用中文代替编程措辞中的英文的编程措辞,同样可以实现程序功能。近日,一位卡内基梅隆大学(CMU)的大四学生开拓了基于文言文的编程措辞,高中语文三大怕的文言文终于找上程序员了。
项目地址:https://github.com/LingDong-/wenyan-lang
这一项目并不是大略的将程序中的英笔墨符换成了中文,而是利用 NLP 的一些技能,将文言文程序语法转换到 JavaScript 或 Python 运行,有一定的技能难度。项目问世几日即获赞 2.2K,还得到了很多人的微博转发。
作为横跨媒体和 AI 的机器之心也测试了这一项目,项目作者的脑洞、文采和创意其实令人惊异。
如果读者想快速试一试,你也可以玩一玩在线 IDE,上面有很多预定义的函数。纵然在手机上,我们也能编辑并运行「文言文代码」。
在线地址:http://wenyan-lang.lingdong.works/ide.html
媒介
作者在项目开篇利用了一段文言文,先容了建立这个项目的初衷。
翻译如下:
在尧舜时期,人们利用结绳和数手指来打算。当时怎么能够预见到,几百代人之后打算机的奥妙呢!
打算机比鲁班(公输盘)的木鸢更加风雅,比诸葛亮(武侯)的木牛流马更好。此外,编程措辞数量浩瀚,犹如《天官书》记录的星宿一样平常多,又比《山海经》中记录的飞禽走兽还要奇特。Go(鼠)、Rust(蟹)、Ruby(鑽)、Fishshell(鱼)因速率而出名。Python(蛇)、Php(象)、Perl(骆)和 JavaScript(犀)则各有独特之处。我这才理解到,为什么鬼会夜哭,天上会下粟雨。(注:传仓颉造字后,鬼神呜咽,天降粟雨)
但以往从未有人利用过文言文进行编程。这并不是传承文脉、保护文心的好方法,以是我才产生了用文言文编程的想法。我目前还太年轻,读过的书也没有破万卷。如今身处迢遥的国家(美国),也良久没有打仗中文了。但是我一贯对文学很有兴趣,编写的程序有时候也得到人们的一些肯定。正如王希孟和庄子一样平常,并不由于年轻或者知识的浩瀚无涯而退缩,于是写下了这些话。
(注:王希孟,北宋画家,18岁画成传世名作《千里江山图》)
我既没有像李贺那样呕心沥血,也没有像李商隐那样口角流沫(形容读书勤奋)。项目完成后,我将连续以干将铸剑的精神勉励自己,带着越王卧薪尝胆的精神连续向前。我自己虽想效仿《算经十书》的笔法,只是遗憾没有唐宋八大家那样淋漓的文笔。正如庾信在《哀江南赋》所写:「陆机听了心甘情愿地拍掌;张衡见了将轻视它也是天经地义」(意指如果被人嘲笑,也是天经地义,我不会太过介意)。
只管这项目只有覆瓮的代价(一点眇小的事情),但是还有完善的空间。虽然没有像吕不韦那样有一字千金的本钱,但是我对互换的渴望是一样的。
这也正是开源的精神内核,我们以此相互勉励吧。
作者是谁?
Lingdong Huang 目前是 CMU 打算机专业大四学生,明年就本科毕业了。我们可以看到他曾在迪士尼研究实验室、纽约时报等大厂演习过。而且从个人网站中,很明显可以创造他高中就开始做各种小项目,包括视觉和自然措辞的都有。
写得了代码、读得了文言文,文化秘闻还这么强,现在的本科生已经这么厉害了。
个人网站:https://lingdong.works
文言文编程是什么情形
用文言文编程是什么样一种体验?是不是既能学习文言文,又能搞定编程逻辑?先容不如演示,我们先看看编程天下里的第一段代码,广大程序员学习的第一句「HelloWord」是什么样的。如果读者们文言文比较溜,或者理解一点程序思维,那么可以理解,下面一段文言文代码便是输出三遍「问天地好在」,也便是「HelloWord」的文言文版。
吾有一數。曰三。名之曰「甲」。為是「甲」遍。 吾有一言。曰「「問天地好在。」」。書之。如斯。
详细而言,先定义一个数「3」,并命名为「甲」,现在循环「甲」次,每次在屏幕上打印出「問天地好在。」。作者会将其翻译成对应的 Javascript 代码,从而帮助我们理解。
var n = 3;for (var i = 0; i < n; i++) { console.log("問天地好在");}
当然,按照我们的习气,改写成 Python 代码也是没问题的:
a = 3for i in range(a): print("問天地好在")
为了更贴近文言文的表达习气,Lingdong Huang 在项目表示各种标点和换行都是可以去掉的,上面的文言文代码可以等价写为:
吾有一數曰三名之曰「甲」為是「甲」遍吾有一言曰「「問天地好在」」書之如斯
溘然觉得,彷佛没了符号的文言文代码更随意马虎懂了?
这样看起来彷佛很大略?那你就小瞧了文言文编程的魅力。比如说程序员入门必修课「斐波那契数列」,每一项都是前两项的和,第一项是 0、第二项是 0+1、第三项是 1+1 等等。
如果用文言文来写斐波那契数列,我们须要建立一个函数,函数的输入是斐波那契项数,输出是该项详细的值。如果用文言文来写,画风是这样的:
末了一句「施「斐氏列」於七。書之。」是调用函数,并输出第 7 个结果。虽然看上去比较麻烦,但我们还是可以细细阅读,例如「吾有一術。名之曰「斐氏列」。」很明显定义了一个函数,函数名是「斐氏列」;「若「因」等於零者。昔之「果」者。今「因」是矣如斯。」表示如果「因」这个变量即是 0,那么就将「因」这个变量的值赋值到「果」变量。
如果阅读上还有困难,那么也可以看看项目作者供应的对应 Javascript 代码。不过我们可以考试测验把它翻译成 Python 措辞,翻译结果如下所示:
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 guoprint(fei_seq(7))
当然,Python 作为一种极其精简的措辞,真正用它来写斐波那契数列肯定代码量要少很多。不过,借助这段翻译,理解文言文编程还是要大略很多的。如果读者想要试一试,可以复制这个 GitHub 项目,并在本地编译,也可以直策应用在线 IDE 编译你的代码。
下面,作为一种「新措辞」,我们当然要理解它的神奇语法,不论是定义变量、函数,还是天生数列,文言文都有对应的语法。
语法规则
考虑到文言文和其他编程措辞的转换有一定的理解难度,作者供应了一些语法转换规则表,供参考。
变量命名
条件/循环
数学打算
数组(列表)
这里从「1」开始计数。
函数
让你的代码更有逼格
看厌了黑底的代码?项目还供应了一个炫酷的「古文代码天生器」,我们可以把自己的文言文代码转换成古书中从右到左,从上到下,没有标点的古文。是不是更有 B 格了?这个天生器还有 SVG 文件,可以将代码再提取出来,重新运行。
以下为项目作者考试测验的「图灵机」代码: