文言文亦能编程,该项目在GitHub摘得5500星!
?
「昔者蒼頡作書,而天雨粟,鬼夜哭」,漢字的出現(xiàn),誕生了世界上一個偉大的文明。而編程語言的出現(xiàn),讓人類和計算機產(chǎn)生了真正的聯(lián)系,推動了現(xiàn)代文明的發(fā)展。
那么,將古代漢語和編程語言結(jié)合又會產(chǎn)生怎樣的火花?最近,GitHub 上出現(xiàn)了一個文言文做代碼的項目,幾乎是世界上第一門文言文編程語言(當然,底層還是轉(zhuǎn)換成 Python 或 JavaScript 運行)。
文言文編程語言橫空出世
如果中文是編程語言中使用的主要語言,我們中國人學習編程是否會更簡單?
這是知乎上討論非常火熱的話題。很多接觸過編程的人都知道「易語言」,這是一種使用中文代替編程語言中的英文的編程語言,同樣可以實現(xiàn)程序功能。近日,一位卡內(nèi)基梅隆大學(CMU)的大四學生開發(fā)了基于文言文的編程語言,高中語文三大怕的文言文終于找上程序員了。
這一項目并不是簡單的將程序中的英文字符換成了中文,而是利用 NLP 的一些技術(shù),將文言文程序語法轉(zhuǎn)換到 JavaScript 或 Python 運行,有一定的技術(shù)難度。截至發(fā)文,項目已經(jīng)獲贊 5K+,還得到了很多人的微博轉(zhuǎn)發(fā)。
?
眾多網(wǎng)友紛紛對這一項目進行了測試,項目作者的腦洞、文采和創(chuàng)意著實令人驚訝。
如果讀者想快速試一試,你也可以玩一玩在線 IDE,上面有很多預定義的函數(shù)。即使在手機上,我們也能編輯并運行「文言文代碼」。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? (文末有傳送地址)
?
文言文怎么編程?
?
Huang Lingdong同學應(yīng)該是讀過《易經(jīng)》,畢竟易經(jīng)是最早論述二進制的古書。他用易經(jīng)的陰和陽代表布爾變量中的0和1。
“吾有”系列則被用來做定義:
吾有一數(shù)是定義int變量;
吾有一爻是定義布爾變量;
吾有一言是定義字符串;
吾有一術(shù)是定義函數(shù);
吾有一列是定義數(shù)組;
……
一般的編程里,循環(huán)判斷有if、while、for,文言文編程在這件事上更是變化無窮。下面就是一段文言文書寫的判斷語句:
若三弗大於五者。乃得「「想當然耳」」。若非。乃得「「怪哉」」也。
翻譯過來就是:
if(3<=5){return "of course"} else{return "no way"}也許你會覺得if…else…語句用文言文太啰嗦,但是常用的for循環(huán),用文言文表達卻更為簡潔。
為是百遍。?? 云云。
它的意思是:
for (var i = 0; i < 100; i++){ ... }如果需要判斷某個變量human是否在world中,我們一般用for (var human of world),初學者看到for的這種用法可能會很困惑,而文言文的表示更接近普通人的理解。
凡「天地」中之「人」。?? 云云。
古有《易經(jīng)》,今有金庸小說,在展示定義函數(shù)的時候,Huang同學又皮了一下:
吾有一術(shù)。名之曰「六脈神劍」。欲行是術(shù)。必先得六數(shù)。曰「甲」。曰「乙」。曰「丙」。曰「丁」。曰「戊」。曰「己」乃行是術(shù)曰。??是謂「六脈神劍」之術(shù)也。
這里Huang同學將函數(shù)名定義為“六脈神劍”,這個函數(shù)總共有6個輸入。
funcion f(a,b,c,d,e,f){…}看厭了黑底的代碼?項目還提供了一個炫酷的「古文代碼生成器」,我們可以把自己的文言文代碼轉(zhuǎn)換成古書中從右到左,從上到下,沒有標點的古文。是不是更有 B 格了?這個生成器還有 SVG 文件,可以將代碼再提取出來,重新運行。
以下為項目作者嘗試的「圖靈機」代碼:
?
語法規(guī)則
考慮到文言文和其他編程語言的轉(zhuǎn)換有一定的理解難度,作者提供了一些語法轉(zhuǎn)換規(guī)則表,供參考。
變量命名
條件/循環(huán)
?
數(shù)學計算
?
數(shù)組(列表)
這里從「1」開始計數(shù)。
?
函數(shù)
?
他是“何方神圣”?
值得注意的是,這個思路清奇的設(shè)計竟然出自一名卡內(nèi)基梅隆大學的大四學生 Ling Dong Huang。
?
在作者簡介中,Ling Dong Huang 表示自己將于 2020 年獲得計算機科學學位,此前,他曾在迪士尼研究院、 Antimodular 研究院和《紐約時報》實習,自己也做了項目網(wǎng)站 https://lingdong.works/。目前已經(jīng)有將近 30 個項目。項目主題豐富多彩,比如用 emoji 做成的小游戲,使用用戶提交的涂鴉做成的計算機動畫,以及和本文一樣對中國下手,把中國表意文字和部首做成可視化動畫,等等,并給出了項目的源代碼。
他還做了一些很有趣的東西,比比如微信終端版,格律詩編輯程序,真實一個傳統(tǒng)文學的愛好者啊!
如果大家想試玩下,可以直接克隆作者的項目,然后按照語法去調(diào)試一下即可,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
傳送門:
項目代碼:
https://github.com/LingDong-/wenyan-lang
項目主頁:
http://wenyan-lang.lingdong.works/
線上IDE試玩:
http://wenyan-lang.lingdong.works/ide.html
個人主頁:
https://lingdong.works/
趕緊去看看小哥的神創(chuàng)造!
安裝與使用
文言文編程只需將repo下載到本地,而且本地已經(jīng)安裝Node,就能立即使用?,F(xiàn)在它支持將wenyan lang轉(zhuǎn)換成JavaScript和Python:
./build/wenyan.js examples/helloworld.wy -o helloworld.js在這段命令中,如果不指定語言,程序?qū)⒆詣愚D(zhuǎn)化為JavaScript,若想轉(zhuǎn)化成Python,請加入?yún)?shù)“—lang py”或是“-l py”。
用戶也可以自行編譯二進制文件。如果你只想嘗嘗鮮,在線IDE也是個不錯的選擇。
小編先去玩了!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?程序員生活志
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 關(guān)注我,不錯過任何一件程序員新鮮事兒!
總結(jié)
以上是生活随笔為你收集整理的文言文亦能编程,该项目在GitHub摘得5500星!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三季1:ORTP库的移植与局域网视频传
- 下一篇: 动易sitefactory 数据库 my