編程者何?所以役機器也。機器者何?所以代人力也。然機器之力也廣,其算也速,唯智不逮也。故有智者慎謀遠慮,下筆千言,如軍令然,如藥方然,謂之程式。機器既明之,乃能為人所使。或演星文,或析事理,其用豈止萬端。問曰:機器者,物也,銅鐵也,何能為而能識人之語,而為人之使耶?曰:此所以有編程語言也。人之所常言,辭或斐然,典或奧雅,機器故不能解。然機器所解者,則寥寥然二三言也。曰與、曰或、曰非。此皆至元之辭,人又未易用之。故取其中庸之道,倣人之所言,取其精煉明要者,點竄典字,嚴定其義。上足觀之而為人之用,下足譯之而為機器所解。是謂編程語言也。古有算經,易有繫辭,其用雖不同,語如其類也。
── 《文言陰符內篇•明義第一》
Helloworld
文言:
1 2 3 4
| 吾有一數。曰三。名之曰「甲」。 為是「甲」遍。 吾有一言。曰「「問天地好在。」」。書之。 云云。
|
等同于以下 JavaScript:
1 2 3 4
| var n = 3; for (var i = 0; i < n; i++) { console.log("問天地好在。"); }
|
输出:
标点符号和换行都是可选的(就像古汉语中文字是连续的),所以上面的代码等同于:
1
| 吾有一數曰三名之曰「甲」為是「甲」遍吾有一言曰「「問天地好在」」書之云云
|
变量
wenyan |
JavaScript |
吾有一數。曰三。名之曰「甲」。 |
var a = 3; |
有數五十。名之曰「大衍」。 |
var dayan = 50; |
昔之「甲」者。今「大衍」是也。 |
a = dayan; |
吾有一言。曰「「噫吁戲」」。名之曰「乙」。 |
var b = "alas!"; |
吾有一列。名之曰「丁」。 |
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 |
容器
数组下标从一开始。而不是零。
wenyan |
JavaScript |
吾有一列。名之曰「甲」。充「甲」以四。以二。 |
var a = []; a.push(4, 2); |
銜「甲」以「乙」。以「丙」 |
a.concat(b).concat(c); |
夫「甲」之一。 |
a[0] |
夫「甲」之其餘。 |
a.slice(1); |
夫「玫瑰」之「「名」」。 |
rose["name"] |
对象
wenyan |
JavaScript |
吾有一物。名之曰「甲」。 |
var a = {}; |
吾有一物。名之曰「甲」。其物如是。物之「「乙」」者。數曰三。物之「「丙」」者。言曰「「丁」」。是謂「甲」之物也。 |
var a = {b:3, c:"d"} |
导入
wenyan |
JavaScript |
吾嘗觀「「算經」」之書。方悟「正弦」「餘弦」之義。 |
var {sin,cos} = require("math"); |
杂项
wenyan |
JavaScript |
吾有一數。曰五。書之。 |
console.log(5); |