畢竟有易語言在前,有人認為中文可以降低國人學習編程的門檻,也增強漢語的國際地位。然而最近大火的文言文程式語言,讓你明白什麼叫「中文比英語還難」。
Hello wenyan最近有個 GitHub 項目火了 —— 文言程式語言 / wenyan-lang。
項目地址:https://github.com/LingDong-/wenyan-lang
這一項目並不是簡單的將程序中的英文字符換成了中文,而是利用 NLP 的一些技術,將文言文程序語法轉換到 JavaScript 或 Python 運行,有一定的技術難度。項目問世幾日即獲贊 2.2K,還得到了很多人的微博轉發。
學語言嘛,當然先從 「Hello world」 開始,看看文言版怎麼寫:
吾有一數。曰三。名之曰「甲」。為是「甲」遍。 吾有一言。曰「「問天地好在。」」。書之。云云。沒看懂,編譯成 JavaScript:
var n = 3;for (var i = 0; i < n; i++) { console.log("問天地好在。");}運行:
完全的中文編程有木有,使用古漢語語法,具有圖靈完整性,可以編譯成 JavaScript 或 Python。
如同古人篆書一般,一頓之乎者也,程序寫好了!
基礎語法趕緊學起來,第一章變量走起,中文編程肯定不能用 abc,還好我們有甲乙丙:
wenyanJavaScript吾有一數。曰三。名之曰「甲」。var a = 3;有數五十。名之曰「大衍」。var dayan = 50;吾有一言。曰「「噫籲戲」」。名之曰「乙」。var b = "alas!";true/false 我們也有對應的 陽/陰(繁體的陽/陰),類型就稱為「爻」(卦符的基本符號):
wenyanJavaScript吾有一爻。曰陰。名之曰「丙」。var c = false;if 判斷也沒問題:
wenyanJavaScript若三不大於五者。乃得「「想當然耳」」。若非。乃得「「怪哉」」也。if(3<=5){return "of course"}else{return "no way"}循環更為簡潔,直接聲明次數,最後以云云結尾:
wenyanJavaScript為是百遍。⋯⋯ 云云。for (var i = 0; i < 100; i++){ ... }恆為是。⋯⋯ 云云。while (true) { ... }乃止。break;加減乘除一應俱全,連邏輯運算符都支持:
wenyanJavaScript加一以二。乘其以三。(1+2)*3除十以三。所餘幾何。10%3減七百五十六以四百三十三。名之曰「甲」。var a = 756-433;夫「甲」「乙」中有陽乎。`a容器類型也支持,而且尊重漢語習慣,首個下標是從一開始:
wenyanJavaScript吾有一列。名之曰「甲」。充「甲」以四。以二。var a = []; a.push(4, 2);夫「寶劍」之長。sword.length;夫「甲」之一。a[0]夫「玫瑰」之「「名」」。rose["name"]下面是進階語法了,定義一個函數 吾有一術:
wenyanJavaScript吾有一術。名之曰「吸星大法」。是術曰。⋯⋯是謂「吸星大法」之術也。function f(){...}吾有一術。名之曰「六脈神劍」。欲行是術。必先得六數。曰「甲」。曰「乙」。曰「丙」。曰「丁」。曰「戊」。曰「己」乃行是術曰。⋯⋯是謂「六脈神劍」之術也。function f(a,b,c,d,e,f){...}吾有一術。名之曰「翻倍」。欲行是術。必先得一數。曰「甲」。乃行是術曰。乘「甲」以二。名之曰「乙」。乃得「乙」。是謂「翻倍」之術也。function double(a){var b = a * 2; return b;}施「翻倍」於「大衍」。double(dayan);吾有一數。曰五。書之。console.log(5);代碼實例作者提供了經典程序題目的文言版代碼,比如埃拉託斯特尼篩法、 快速排序、曼德博集合、漢諾塔。
另外作者還提供了在線 IDE,可以直接編譯執行代碼。
快排點擊查看大圖曼德博集合點擊查看大圖看完這些代碼讓我感覺:
《九章算術》就是一本算法導論;
《孫子兵法》就是一本安全攻防;
《易經》大概是一本二進位逆向吧...