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