文言文編程語言來了可是好像比英文更難寫了
近日有開發者開源了一門新的編程語言,吸引了大量開發者的目光,短短幾天獲得了3k+ star。該語言名為“ 文言(wenyan-lang) ”,這是一門採用文言文輸入的編程語言,該語言不包括英文字符,僅包含繁體中文字符,並保留繁體引號“”。
先看看Helloworld 怎麼寫:
吾有一數。曰三。名之曰“甲”。為是“甲”遍。吾有一言。曰“「問天地好在。”」。書之。云云。
這段代碼等效於以下JavaScript 代碼:
var n = 3;for (var i = 0; i < n; i++) { console.log("問天地好在。");}
輸出:
問天地好在。問天地好在。問天地好在。
同時,標點和換行符是完全可選的,與古漢語一致,所以上面的代碼等效於:
吾有一數曰三名之曰“甲”為是“甲”遍吾有一言曰“「問天地好在”」書之云云
Helloworld 看上去雖然簡單,但是其實作為一門編程語言,這裡的語法都有嚴格的定義:
變量
wenyan | JavaScript |
---|---|
吾有一數。曰三。名之曰“甲”。 | var a = 3; |
有數五十。名之曰“大衍”。 | var dayan = 50; |
昔之“甲”者。今“大衍”是也。 | a = dayan; |
吾有一言。曰“「噫吁戲”」。名之曰“乙”。 | var b = "alas!"; |
吾有一爻。曰陰。名之曰“丙”。 | var c = false; |
吾有一列。名之曰“丁”。 | var d = []; |
吾有三數。曰一。曰三。曰五。名之曰“甲”曰“乙”曰“丙”。 | var a=1,b=3,c=5; |
控制
wenyan | JavaScript |
---|---|
若三大於二者。乃得“「想當然耳”」也。 | 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; |
運算
wenyan | JavaScript |
---|---|
加一以二。 | 1+2 |
加一於二。 | 2+1 |
加一以二。乘其以三。 | (1+2)*3 |
除十以三。所餘幾何。 | 10%3 |
減七百五十六以四百三十三。名之曰“甲”。 | var a = 756-433; |
夫“甲”“乙”中有陽乎。 | a || b |
夫“甲”“乙”中無陰乎。 | a && b |
容器
數組從1 開始索引。
wenyan | JavaScript |
---|---|
吾有一列。名之曰“甲”。充“甲”以四。以二。 | var a = []; a.push(4, 2); |
銜“甲”以“乙”。以“丙” | a.concat(b).concat(c); |
夫“甲”之一。 | a[0] |
夫“甲”之其餘。 | a.slice(1); |
夫“玫瑰”之“「名”」。 | rose["name"] |
夫“寶劍”之長。 | sword.length; |
函數
wenyan | JavaScript |
---|---|
吾有一術。名之曰“吸星大法”。是術曰。⋯⋯是謂“吸星大法”之術也。 | function f(){...} |
吾有一術。名之曰“六脈神劍”。欲行是術。必先得六數。曰“甲”。曰“乙”。曰“丙”。曰“丁”。曰“戊”。曰“己”乃行是術曰。⋯⋯是謂“六脈神劍”之術也。 | function f(a,b,c,d,e,f){...} |
吾有一術。名之曰“翻倍”。欲行是術。必先得一數。曰“甲”。乃行是術曰。乘“甲”以二。名之曰“乙”。乃得“乙”。是謂“翻倍”之術也。 | function double(a){var b = a * 2; return b;} |
但是作者表示上下文無關的語法描述還在構建中。
文言語言採用自然語言處理共享了古典漢語語法,將語言編譯為JavaScript 或Python,並且圖靈完備。同時它不僅提供了一個配套在線IDE,還提供了大量算法與數據結構示例,包括快排、漢諾塔問題與斐波那契數列表示等。