文言文也能编程

Cherry 34m2019-12-18908 次点击2 人感谢
https://ppmm.org/images/2019/12/18/95a146e98899055283cd50f030e32840.jpg

这是一个叫做Lingdong的大四学生在GitHub上的一个开源项目,吓得我赶紧Star了一下,目前已经有5K+的Star数了

这个项目受到了大家很高的评价,编程不再是英文的专属了哈,当然目前这个也只是玩玩,不过如果用于教学,是不是可以一边学习文言文一边学习编程了

先引用作者的一段话:
然以文言編程者 ,似所未有。此誠非文脈之所以傳,文心之所以保。嗟予小子,遂有斯志。然則數寸之烏絲猶覆於頭,萬卷之素書未破於手;一身長羁于远邦,兩耳久旷于雅言。然夫文章者吾之所宿好,程式者偶承時人之謬譽。故希孟不慚年少,莊生不望無涯。乃作斯言。誠未能嘔瀝長吉之心血,亦庶幾免於義山之流沫。既成之後,復學干將鑄劍而自飼,越王嚐糞而當先。

作者提供了一个在线的IDE,目前支持Python以及JavaScript。接下来我们看看到底是怎么编程的呢?

首先我们看看怎么定义一个变量:
吾有一數。曰三。名之曰「甲」。var a = 3;
有數五十。名之曰「大衍」。 var dayan = 50;
昔之「甲」者。今「大衍」是也。a = dayan;
吾有一言。曰「「噫吁戲」」。名之曰「乙」。var b = "alas!";
吾有一爻。曰陰。名之曰「丙」。var c = false;
吾有一列。名之曰「丁」。var d = [];
吾有三數。曰一。曰三。曰五。名之曰「甲」曰「乙」曰「丙」。var a=1,b=3,c=5;

绝了,这都能想出来!
怎么定义一些函数运算呢,我们的if for while语句,就不信他也能用文言文翻译出来

若三大於二者。乃得「「想當然耳」」也。if (3>2){‌‌‌ return "of course"; }
若三不大於五者。乃得「「想當然耳」」。若非。乃得「「怪哉」」也。if(3<=5){‌‌‌return "of course"}else{‌‌‌return "no way"}
為是百遍。⋯⋯ 云云。for (var i = 0; i < 100; i++){‌‌‌ ... }
恆為是。⋯⋯ 云云。while (true) {‌‌‌ ... }
凡「天地」中之「人」。⋯⋯ 云云。for (var human of world){‌‌‌ ... }
乃止。break;

还有数学运算呢

加一以二。1+2
加一於二。2+1
加一以二。乘其以三。(1+2)*3
除十以三。所餘幾何。10%3
減七百五十六以四百三十三。名之曰「甲」。var a = 756-433;
夫「甲」「乙」中有陽乎。a || b
夫「甲」「乙」中無陰乎。a && b
还有一些语法,这里就不一一展开说了,总之,很牛逼!
接下来我们来一段打印语句,这里不要再来Hello World了吧
吾有一數。曰三。名之曰「甲」。
為是「甲」遍。
吾有一言。曰「「問天地好在。」」。書之。
云云。

我们翻译成Javascript:

var n = 3;
for (var i = 0; i < n; i++) {‌‌‌
console.log("問天地好在。");
}

哈哈,接着就输出了打印结果:

問天地好在。
問天地好在。
問天地好在。

The Online IDE
http://wenyan-lang.lingdong.works/ide.html

https://ppmm.org/images/2019/12/18/cfe4564c829b1ae0c79c90c777ab126d.jpg
https://ppmm.org/images/2019/12/18/1d0495c667e1b52bcdc0195341c1ee33.jpg

他还做了一些很有趣的东西,比比如微信终端版,格律诗编辑程序,真实一个传统文学的爱好者啊!
如果大家想试玩下,可以直接克隆作者的项目,然后按照语法去调试一下即可,macOS、Wondows、Linux的二进制文件将位于./build文件夹中。
Usage: wenyan [options] [input files]

Options:
--eval -e <string> : Give a string instead of a file (default: `')
--exec -x <boolean> : Execute output (default: `false')
--inspect -i <boolean> : Interactive REPL (default: `false')
--lang -l <string> : Language: js/py (default: `js')
--log <string> : Log file (default: `/dev/null')
--output -o <string> : Output file (default: `/dev/stdout')
--roman -r <boolean> : Romanize identifiers (default: `true')
./build/wenyan.js examples/helloworld.wy -o helloworld.js

作者还有一些其它好玩的项目,例如可以用程序无限生成的中国山水画,错山记(中文翻译哈),格律诗编辑程序,隐士等等,GitHub上都能找到,大家不妨去看一下

GitHub链接:https://github.com/LingDong-/wenyan-lang
收藏 ♥ 感谢
Spoony 小组长 2019-12-18 
给跪了 ▄█▀█●
小布丁 75cm 2019-12-19 
真是吊咋天呢。。。
RaspiSQH 117.85m 2019-12-19 
不会只是重写了解释器吧……

登录注册 后可回复。



GitHub