文言文編程火了,可我徹底學不懂

畢竟有易語言在前,有人認爲中文能夠下降國人學習編程的門檻,也加強漢語的國際地位。然而最近大火的文言文編程語言,讓你明白什麼叫「中文比英語還難」。git

Hello wenyan

最近有個 GitHub 項目火了 —— 文言編程語言 / wenyan-lang。github

如今這個項目已經超過 10K Stars 了(昨天看仍是 9K,一晚上漲了 1K),咱趕忙來研究下。算法

學語言嘛,固然先從 「Hello world」 開始,看看文言版怎麼寫:編程

吾有一數。曰三。名之曰「甲」。
為是「甲」遍。
	吾有一言。曰「「問天地好在。」」。書之。
云云。

沒看懂,編譯成 JavaScript:安全

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

運行:微信

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

徹底的中文編程有木有,使用古漢語語法,具備圖靈完整性,能夠編譯成 JavaScript 或 Python。編程語言

如同古人篆書通常,一頓之乎者也,程序寫好了!函數

基礎語法

趕忙學起來,第一章變量走起,中文編程確定不能用 abc,還好咱們有甲乙丙:學習

wenyan JavaScript
吾有一數。曰三。名之曰「甲」。 var a = 3;
有數五十。名之曰「大衍」。 var dayan = 50;
吾有一言。曰「「噫籲戲」」。名之曰「乙」。 var b = "alas!";

true/false 咱們也有對應的 陽/陰(繁體的陽/陰),類型就稱爲「爻」(卦符的基本符號):測試

wenyan JavaScript
吾有一爻。曰陰。名之曰「丙」。 var c = false;

if 判斷也沒問題:

wenyan JavaScript
若三不大於五者。乃得「「想當然耳」」。若非。乃得「「怪哉」」也。 if(3<=5){return "of course"}else{return "no way"}

循環更爲簡潔,直接聲明次數,最後以云云結尾:

wenyan JavaScript
為是百遍。⋯⋯ 云云。 for (var i = 0; i < 100; i++){ ... }
恆為是。⋯⋯ 云云。 while (true) { ... }
乃止。 break;

加減乘除包羅萬象,連邏輯運算符都支持:

wenyan JavaScript
加一以二。乘其以三。 (1+2)*3
除十以三。所餘幾何。 10%3
減七百五十六以四百三十三。名之曰「甲」。 var a = 756-433;
夫「甲」「乙」中有陽乎。 `a

容器類型也支持,並且尊重漢語習慣,首個下標是從一開始:

wenyan JavaScript
吾有一列。名之曰「甲」。充「甲」以四。以二。 var a = []; a.push(4, 2);
夫「寶劍」之長。 sword.length;
夫「甲」之一。 a[0]
夫「玫瑰」之「「名」」。 rose["name"]

下面是進階語法了,定義一個函數 吾有一術:

wenyan JavaScript
吾有一術。名之曰「吸星大法」。是術曰。⋯⋯是謂「吸星大法」之術也。 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,能夠直接編譯執行代碼。

快排

點擊查看大圖

曼德博集合

點擊查看大圖

看完這些代碼讓我感受:

《九章算術》就是一本算法導論;

《孫子兵法》就是一本安全攻防;

《易經》大概是一本二進制逆向吧...

一些題外話

該項目的做者名叫 Huang Lingdong,卡內基梅隆大學(CMU)計算機專業大四學生。這麼一位世界頂級高校的大佬,作這個項目其實只是一個期末做業亦或業餘愛好。

點進 issues,廣大中國編程愛好者也表達了對做者的敬佩:

然而當我也驚歎這個項目的腦洞和創意時,在 issues 裏仍是看到了一些令我很是不悅的話題:

這位兄弟的腦洞看來比做者還大...

否則怎麼把一個編程語言聯繫到風投...

這位兄弟前半句是對的,但後半句彷佛有一些鄙夷和不屑?

我在下邊回覆給他一個表情:

固然哪裏都少不了「意義黨」:

真是哪裏都有上綱上線的人,做者自娛自樂寫了一個開源項目,爲此查閱大量古漢語資料,也不圖什麼名利,就得到幾千 Stars,就成爲了某些人嘴裏的恰爛錢、無心義、垃圾項目。

而當我點開這些人的頭像時,發現他們掛着都是一些 Fork 和不明因此的 Repo,我也不知道他們掛這些的意義是什麼...

我固然也從源碼看出,這個項目可能叫「解釋器」更貼切一些,但做者也歷來沒說這是一個多麼認真、能用於生產環境的正式項目。

Esolang

若是你和上面的他們有相似的想法,那麼我給你普及一個編程名詞:

Esoteric programming language,簡稱 Esolang,它們的設計被用於測試計算機語言設計的極限,做爲一個概念的證實,或僅僅是一個玩笑。Esolang 創做者一般並不打算讓它成爲主流編程語言,他們幾乎不會在乎語言的可用性,甚至偏偏相反,會故意增長使用難度。

好比 Brainfuck,它是在 1993 年被創造的編程語言,語法僅包含八種符號,沒有任何單詞,用它打印 Hello world 是這樣的:

++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.
>.+++.------.--------.>+.>.

再好比 MarioLANG,它一樣只能使用符號,須要使用形似馬里奧關卡的語法來書寫:

++++:       >       >  +:+:+:+:+:+:+:::::
====+      >^===    """=================
    +:-):(:^=   =                       !
    =========    =                      #
                  = !             .+.,:-<
                   =###           ======"

Parenthesis Hell,言如其名,括號地獄,只能使用括號來書寫:

(()()(()()(()()()()((()()(()(()((()((()()()((()((()()()((()((((()()(()(
)()()()()(((()(((()((()((((()(((()()(()()((()((()()()((()()(()()()()(()
()()()(()()()()(()(())))))))))))))))))))))))))))))))))))))))))))))))))

因此 wenyan-lang 實際也屬於 Esolang,並非用於生產的語言,你在這些語言中尋找意義,我以爲你這種行爲就挺沒意義的...

wenyan-lang GitHub: https://github.com/LingDong-/wenyan-lang


本文屬於原創,首發於微信公衆號「面向人生編程」,如需轉載請後臺留言。

相關文章
相關標籤/搜索