wenyan-lang / wenyan

文言文編程語言 A programming language for the ancient Chinese.
https://wy-lang.org/
MIT License
19.63k stars 1.1k forks source link

some suggestions for wenyan-lang #122

Open mozii opened 4 years ago

mozii commented 4 years ago

some suggestions for wenyan-lang

吾好文章,不善程式,非程序员。乃有感于君言,强为一二建议。仅读 Syntax Cheatsheet,未及源码,管中窥豹,愿有所助。

以下是一点建议,还是用现代普通话,便于交流。

Variables

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
吾有一數。乃三。名之曰「甲」。 var a = 3;
有數五十。名之曰「大衍」。 var dayan = 50;
昔之「甲」者。今「大衍」是也。 a = dayan;
吾有一言。乃「「噫吁戲」」。名之曰「乙」。 var b = "alas!";
吾有一爻。乃陰。名之曰「丙」。 var c = false;
吾有一列。名之曰「丁」。 var d = [];
吾有三數。乃一。三。五。名之曰「甲」曰「乙」曰「丙」。 var a=1,b=3,c=5;

Control

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;

「乃得」在语境中是不准确的,若三大於二者。乃得「「想當然耳」」也。会让人以为只有当3>2,才能返回「「想當然耳」」,实际上if (3>2){ return "of course"; }并非如此。尝试作如下修改。删掉「乃」字,既能够减少误解,也更简洁。

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;

Math

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

「有陽乎」,似不妥当。夫「甲」「乙」中有陽乎。 不如 夫「甲」「乙」中有陽耶。除了个人感觉音韵上更协调一点,「耶」比「乎」可能更为被一般现代人理解其表疑问的语言色彩。

wenyan JavaScript
夫「甲」「乙」中有陽耶。 a || b
夫「甲」「乙」中無陰耶。 a && b

Functions

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);

这一句,吾有一術。名之曰「六脈神劍」。欲行是術。必先得六數。曰「甲」。曰「乙」。曰「丙」。曰「丁」。曰「戊」。曰「己」乃行是術曰。⋯⋯是謂「六脈神劍」之術也。删掉乃行是術曰。 为宜,前文已有 必先得 ,已足够明确。另外,是谓 可以考虑改为 所谓 。综合来看吾有一術。名之曰「六脈神劍」。欲行是術。必先得六數。曰「甲」。曰「乙」。曰「丙」。曰「丁」。曰「戊」。曰「己」。⋯⋯所謂「六脈神劍」之術也。

其他几句类似之处,更改如下。

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);
MountLion commented 4 years ago

您的提议显然是一种退步

LingDong- commented 4 years ago

Hi there, thanks a lot for your detailed proposal

But thanks again for your suggestions, I'd love to hear more opinions from everyone!

mozii commented 4 years ago

您的提议显然是一种退步

您就是个傻逼

mozii commented 4 years ago
  • 名余曰正則兮,字余曰靈均

emm, 仅仅从语言的角度提了点意见,综合编程来考虑更好。 不过,「名余曰正則兮,字余曰靈均」,此处的两个「曰」,跟你那里的用法显然是不同的。

lymslive commented 4 years ago

May I replay this older issue here? I also feel that you have a bit overused '曰', it's better only use '曰' for value, meaning "the variable say out it's content like this", while select another character for naming the variable itself.

'乃' may be acceptable, and I want suggest another character '以':

吾有一数,名之以甲,曰三。// 其值曰三 as I preferred 
吾有一数,曰三,乃名甲也。
有数名甲曰三。// simplest style in future consideration

wenyan-lang 毕竟不是古汉语,应该是从后者中精心设计(挑选)的一个子集,汉字有多义性,但程序语言力求精确。wenyan-lang 可以在程序语境下赋于每个关键字汉字以不同的特殊含义。