「昔者苍颉作书,而天雨粟,鬼夜哭」,汉字的出现,诞生了世界上一个伟大的文明。而编程语言的出现,让人类和计算机产生了真正的联系,推动了现代文明的发展。那么,将古代汉语和编程语言结合又会产生怎样的火花?最近,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     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 guo

print(fei_seq(7))

当然,Python 作为一种极其精简的语言,真正用它来写斐波那契数列肯定代码量要少很多。不过,借助这段翻译,理解文言文编程还是要简单很多的。如果读者想要试一试,可以复制这个 GitHub 项目,并在本地编译,也可以直接使用在线 IDE 编译你的代码。下面,作为一种「新语言」,我们当然要了解它的神奇语法,不论是定义变量、函数,还是生成数列,文言文都有对应的语法。语法规则考虑到文言文和其他编程语言的转换有一定的理解难度,作者提供了一些语法转换规则表,供参考。变量命名
条件/循环
数学计算
数组(列表)
这里从「1」开始计数。函数
让你的代码更有逼格
看厌了黑底的代码?项目还提供了一个炫酷的「古文代码生成器」,我们可以把自己的文言文代码转换成古书中从右到左,从上到下,没有标点的古文。是不是更有 B 格了?这个生成器还有 SVG 文件,可以将代码再提取出来,重新运行。以下为项目作者尝试的「图灵机」代码:

本文转载自:「机器之心」,原文:https://url.cn/5aq9oaN,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com 。

你可能还喜欢

点击下方图片即可阅读

巧用 Cowrie 部署 SSH 蜜罐,让黑客攻击无处遁形!

文言文生成器_英语不好,学编程太困难?或许用文言文来编程你就更加容易上手了!...相关推荐

  1. cfa英语不好的怎么学_英语不好,如何备考CFA?

    众所周知,CFA是一项全英考试,足足这一点就把很多对CFA有意向的考生挡在了门外,大家望而却步,都觉得英语是一条不可逾越的鸿沟.明明对金融很感兴趣,但是却不敢报名. 那么我们今天就来谈谈,英语不好该如 ...

  2. MySQL英语不好能学吗_英语不好,我能学好编程语言吗

    我们都知道敲代码是程序员每天都干的事情,可是很多人都以为,我英语不好,我不喜欢英语,但我喜欢软件,我能学好吗? 答案是肯定的!!! 首先,我们学软件要接触到的目前有统计过,实实在在常用的只有476个单 ...

  3. java英文不好可以学吗_英语不好可以学好Java吗?

    英语不好可以学好Java吗?许多人都觉得英语好,学编程就一定学的好.实际上,并非如此,虽然计算机程序大都采用英语的语法,但这跟英语是两码事.会英语的人多了,英语八级的同学看到程序照样是一点不会.经实际 ...

  4. cfa英语不好的怎么学_英语不好该如何备考CFA并取得好成绩?

    众所周知,>>点我了解更多CFA备考技巧 那么我们今天就来谈谈英语不好该如何备考CFA并且取得好成绩呢? 首先,我们一定要从心底里克服恐惧.不要有消极的心里暗示,其实英语基础好不好对考试能 ...

  5. 这70个Java必背英语单词不会_英语不好没关系,背过这70个单词学java足够了!

    原标题:英语不好没关系,背过这70个单词学java足够了! 许多同学总是担心自己英语不好,学不好java,从而放弃了转行的想法,有的时候甚至因为自己的一时犹豫错失好的时机,一些人甚至错过了改变人生的转 ...

  6. 英语不好学java好学吗_英语不好能学好java,做程序员吗?

    原标题:英语不好能学好java,做程序员吗? 很多想学java的朋友,都存在着这样一个疑惑:我的英语很差劲,对学习java没有影响吗?java编程用到英语的地方很多吧,我英语不好能学好java吗? 学 ...

  7. 英语不好能学会python吗_英语不好可以学习python编程吗?老男孩python入门

    随着社会的发展以及进步,互联网行业变得更加受关注,现在编程人员市场上需求量增高,越来越多的人都想要学习编程,尤其是python,虽然语法清晰.简单易学,但是依然有部分人因为自己英文不好,担心学习不好, ...

  8. 自学python困难吗_自学Python会有什么困难?老男孩自学python编程

    学习Python开发的过程中,不少自学Python的小伙伴失败了,Python一直以来都是深受程序员喜爱的编程语言,那么自学Python编程为什么难?Python开发要怎样学呢?其实自学的大问题就是难 ...

  9. python对英语的要求_英语和数学都不好,但是我想学Python编程可以吗?

    我们有很多人想要做某件事之前都会产生畏难情绪,比如有很多人问:英语和数学都不好,但是我想学Python编程可以吗?你们大家说可以吗?可以,为什么呢?不可以,为什么呢? 收到很多咨询的留言,学生总是会问 ...

最新文章

  1. ElasticSearch IK分词器安装
  2. 3.1.3 awk命令用法
  3. c++中的字符集与中文
  4. AIX 6.1 异步 I/O 的 配置与性能评估
  5. Symfony2中的命名约定
  6. python3.6进度条_Python实现下载界面(带进度条,断点续传,多线程多任务下载等)...
  7. Cesium之初始化视图
  8. php 判断是否文件,php 判断是否一个文件的函数is_file()应用举例
  9. sublime编辑器无法正常打印中文问题解决
  10. UI素材|让设计有愉悦的体验,app交互动效的重要性!
  11. 由c#事件监听、回调函数引发观察者模式
  12. date,datetime,timestamp 的区别
  13. 任务管理平台_“平房区教师培训学分管理平台启用暨任务部署培训会议”
  14. 码栈搭建自动化应用(可视化模式)
  15. 使用 ASP.NET 制作一个音乐网站
  16. iphone11返回上一级手势怎么设置_iPhone11怎么返回手势操作
  17. android 朋友圈图文,Android 微信分享图片(好友和朋友圈)
  18. 【概率期望】【NOIP模拟】切题
  19. Poi excel 导出 工具类参考
  20. P4735 最大异或和 01可持久化Trie树模板

热门文章

  1. mui.ajax php,求助!!!关于mui ajax获取不到后台数据
  2. ea mysql建模_UML数据建模工具之Enterprise Architect(EA)实例-UML应用
  3. socket接收时信号量阻塞了会丢数据吗_浅谈Java网络编程——非阻塞I/O
  4. C++数据结构02--链式线性表(单链表的实现)
  5. 文件的上传、文件的下载、I18N国际化
  6. NanoLog软件架构
  7. 内存管理器剖析:ptmalloc,windows,macOS
  8. tar+openssl加密压缩解压缩
  9. echarts做企业关系图谱_建立良好客户关系 做有温度的企业
  10. excel合并多个工作表_excel中汇总多个工作表数据的神器——合并计算