Wenyan

wenyan (文言) is a language created by LingDong- in 2019. The language is Turing Complete. Wenyan-lang use classical Chinese as its source code. It currently has multiple backends including JavaScript, Python, and Ruby.
== Code Samples ==
===Hello World===
吾有一言。曰「「Hello World」」。書之。
===99 bottles of beer simulator===
吾有一言。曰「「春日宴。」」。書之。
有數九九。名之曰「酒數」。
批曰。「「请勾选输出汉字选项。」」
恆為是。若「酒數」等於零者乃止也。
	吾有三言。曰「「與君」」。曰「酒數」。
		曰「「杯酒。可以窮歡宴。綠酒一杯歌一遍。」」。書之。
減「酒數」以一。昔之「酒數」者。今其是矣云云。
吾有一言。曰「「綠酒千杯腸已爛。」」。書之。
In English:
有數九九。名之曰「a」。
批曰。「「请勿勾选输出汉字选项。」」
恆為是。
 若「a」小於三者乃止也。
 減「a」以一。
 有數一。名之曰「z」。昔之「z」者。今其是矣。
 吾有六言。
 曰「a」。
 曰「「bottles of beer on the wall,」」。
 曰「a」。
 曰「「bottles of beer.\nTake one down and pass it around,」」。
 曰「z」。
 曰「「bottles of beer on the wall.\n」」。
 書之。
 昔之「a」者。今「z」是矣
云云。
吾有一言。曰「「2 bottles of beer on the wall, 2 bottles of beer.\nTake one down and pass it around, 1 bottle of beer on the wall.\n\n1 bottle of beer on the wall, 1 bottle of beer.\nTake one down and pass it around, no more bottles of beer on the wall.\n\nNo more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.」」。書之。
===Fibonacci sequence from 1 to 10===
有數一。名之曰「代」。
有數零。名之曰「母」。
有數一。名之曰「子」。
有數零。名之曰「实」。
恆為是。若「代」大於十者乃止也。
 加「母」以「子」。昔之「实」者。今其是矣。
 夫「代」，夫「「代：」」，夫「实」，書之。
 昔之「子」者。今「母」是矣。
 昔之「母」者。今「实」是矣。
 加「代」以一。昔之「代」者。今其是矣。
云云。
===Mandelbrot set code===
吾有一術。名之曰「曼德博」。欲行是術。必先得二數。曰「寬」。曰「高」。乃行是術曰。
	批曰。「「曼德博集。亦稱曼德布洛特复数集合。复平面上组成分形之点之集合也。」」
	吾有一言。曰「「丁龘蠹臺龜畫龍淼蔑高五三二」」。名之曰「皴法」。
	批曰。「「皴法者。圖畫之法也」」。
	減零以一。名之曰「上」。加零以一。名之曰「下」。
	減零以二。名之曰「左」。加零以二。名之曰「右」。
	減「右」以「左」。除其以「寬」。名之曰「橫步」。
	減「下」以「上」。除其以「高」。名之曰「縱步」。
	有數零。名之曰「戊」。恆為是。若「戊」等於「高」者乃止也。
		乘「縱步」以「戊」。加其以「上」。以名之曰「虛」。
		吾有一言。名之曰「行」。
		有數零。名之曰「戌」。恆為是。若「戌」等於「寬」者乃止也。
			乘「橫步」以「戌」。加其以「左」。名之曰「實」。
			夫「虛」。名之曰「虛虛」。
			夫「實」。名之曰「實實」。
			批曰。「「凡每一像素。皆算令其收斂之最大疊代數」」。
			有數零。名之曰「己」。恆為是。若「己」等於十二者乃止也。
				乘「實實」以「實實」。乘「虛虛」以「虛虛」。名之曰「甲」。曰「乙」。
				加「甲」以「乙」。名之曰「丙」。
				若「丙」大於四者乃止也。
				乘「虛虛」以「實實」。乘其以二。加其以「虛」。昔之「虛虛」者。今其是矣。
				減「甲」以「乙」。加其以「實」。昔之「實實」者。今其是矣。
			加一以「己」。昔之「己」者。今其是矣云云。
			批曰。「「既得疊代數。乃以皴法圖之」」。
			減十三以「己」。名之曰「巳」。
			夫「皴法」之「巳」。名之曰「墨」。
			加「行」以「墨」。昔之「行」者。今其是矣。
		加一以「戌」。昔之「戌」者。今其是矣云云。
		吾有一言。曰「行」。書之。
	加一以「戊」。昔之「戊」者。今其是矣云云。
是謂「曼德博」之術也。
批曰。「「畫曼德博集合之法。至是盡矣。乃一試之」」。
施「曼德博」於五十九。於二十四。
批曰。「「This programming language currently doesn't support standard input.」」。
===Sieve of Eratosthenes===
吾有一術。名之曰「埃氏篩」。欲行是術。必先得一數。曰「甲」。乃行是術曰。
	吾有一列。名之曰「掩」。為是「甲」遍。充「掩」以陽也。
	除「甲」以二。名之曰「甲半」。
	有數二。名之曰「戊」。恆為是。若「戊」等於「甲半」者乃止也。
		有數二。名之曰「戌」。恆為是。若「戌」等於「甲半」者乃止也。
			乘「戊」以「戌」。名之曰「合」
			若「合」不大於「甲」者。
				昔之「掩」之「合」者。今陰是矣。
			若非乃止也。
		加一以「戌」。昔之「戌」者。今其是矣云云。
	加一以「戊」。昔之「戊」者。今其是矣云云。
	吾有一列。名之曰「諸素」。
	昔之「戊」者。今二是矣。恆為是。若「戊」等於「掩」之長者乃止也。
		夫「掩」之「戊」。名之曰「素耶」。
		若「素耶」者充「諸素」以「戊」也。
	加一以「戊」。昔之「戊」者。今其是矣云云。
	乃得「諸素」。
是謂「埃氏篩」之術也。
施「埃氏篩」於一千。書之。
===9x9 Multiplication===
吾有一術名之曰「乘算口訣」。是術曰。
	有數一名之曰「甲」。
	恆為是。若「甲」不小於十者乃止也。
		有數一名之曰「乙」。
		加「甲」以「乙」名之曰「丙」。
		恆為是。若「乙」不小於「丙」者乃止也。
				乘「甲」以「乙」名之曰「果」。
				若「果」不小於十者吾有三言。曰「乙」曰「甲」曰「果」書之。
				若非吾有四言。曰「乙」曰「甲」曰「「得」」曰「果」書之也。
				加「乙」以一。昔之「乙」者今其是矣。
		云云。
		加「甲」以一。昔之「甲」者今其是矣。
	云云。
是謂「乘算口訣」之術也。
施「乘算口訣」。
===Powers of 2===
有數一。名之曰「z」。
有數百。名之曰「a」。
恆為是。若「a」等於零者乃止也。
	減「a」以一。昔之「a」者。今其是矣。
	吾有一言。曰「z」。書之。
	乘「z」以二。昔之「z」者。今其是矣。
云云。
Quine (Shortest possible, I think):
 吾有一術曰「String.fromCharCode」名之曰「e」吾有一言曰「「吾有一術曰!String.fromCharCode$名之曰!e$吾有一言曰!!@$$名之曰!a$施!(x=>x.replaceAll('!',e(12300)).replaceAll('$',e(12301)).replace('@',a))$於!a$書之」」名之曰「a」施「(x=>x.replaceAll('!',e(12300)).replaceAll('$',e(12301)).replace('@',a))」於「a」書之
The one given as example:
 吾有一術。名之曰「自己複製」。欲行是術。是術曰。吾有一術。名之曰「置換」。欲行是術。必先得三數。曰「文字列」。曰「置換対象」。曰「置換先」是術曰。吾有一言。曰「「」」。名之曰「返品」。吾有一數。曰二。名之曰「未来」。吾有一爻。曰陽。名之曰「実行条件」。凡「文字列」中之「文字」。若「実行条件」者。若「文字」等於「「星」」中無陰乎「文字列」之「未来」等於「置換対象」者。昔之「文字」者。今「置換先」是。昔之「実行条件」者。今陰是。也。加「返品」以「文字」。昔之「返品」者。今其是矣。若非。昔之「実行条件」者。今陽是。也。加「未来」以一。昔之「未来」者。今其是矣。云云。乃得「返品」。是謂「置換」之術也。吾有一言。曰String.fromCharCode名之曰「函数」。施「函数」於一萬二千三百。昔之「始」者。今其是矣。施「函数」於一萬二千三百零一。昔之「終」者。今其是矣。吾有二言。曰「「吾有一術。名之曰星甲自己複製星乙。欲行是術。是術曰。吾有一術。名之曰星甲置換星乙。欲行是術。必先得三數。曰星甲文字列星乙。曰星甲置換対象星乙。曰星甲置換先星乙是術曰。吾有一言。曰星甲星甲星乙星乙。名之曰星甲返品星乙。吾有一數。曰二。名之曰星甲未来星乙。吾有一爻。曰陽。名之曰星甲実行条件星乙。凡星甲文字列星乙中之星甲文字星乙。若星甲実行条件星乙者。若星甲文字星乙等於星甲星甲星星乙星乙中無陰乎星甲文字列星乙之星甲未来星乙等於星甲置換対象星乙者。昔之星甲文字星乙者。今星甲置換先星乙是。昔之星甲実行条件星乙者。今陰是。也。加星甲返品星乙以星甲文字星乙。昔之星甲返品星乙者。今其是矣。若非。昔之星甲実行条件星乙者。今陽是。也。加星甲未来星乙以一。昔之星甲未来星乙者。今其是矣。云云。乃得星甲返品星乙。是謂星甲置換星乙之術也。吾有一言。曰String.fromCharCode名之曰星甲函数星乙。施星甲函数星乙於一萬二千三百。昔之星甲始星乙者。今其是矣。施星甲函数星乙於一萬二千三百零一。昔之星甲終星乙者。今其是矣。吾有二言。曰星甲星甲星丙星乙星乙。曰星甲星甲星乙星乙。名之曰星甲原文星乙曰星甲結果星乙。施星甲置換星乙於星甲原文星乙。於星甲星甲甲星乙星乙。於星甲始星乙。昔之星甲結果星乙者。今其是矣。施星甲置換星乙於星甲結果星乙。於星甲星甲乙星乙星乙。於星甲終星乙。昔之星甲結果星乙者。今其是矣。施星甲置換星乙於星甲結果星乙。於星甲星甲丙星乙星乙。於星甲原文星乙。昔之星甲結果星乙者。今其是矣。吾有一言。曰星甲結果星乙。書之。是謂星甲自己複製星乙之術也。施星甲自己複製星乙。」」。曰「「」」。名之曰「原文」曰「結果」。施「置換」於「原文」。於「「甲」」。於「始」。昔之「結果」者。今其是矣。施「置換」於「結果」。於「「乙」」。於「終」。昔之「結果」者。今其是矣。施「置換」於「結果」。於「「丙」」。於「原文」。昔之「結果」者。今其是矣。吾有一言。曰「結果」。書之。是謂「自己複製」之術也。施「自己複製」。
===Brainfuck interpreter===
See here
===Deadfish===
吾有一術。名之曰「死魚」。欲行是術。必先得一言。曰「代碼」。
乃行是術曰。
	有數零。名之曰「纍加器」。
	凡「代碼」中之「字」。
		若「字」等於「「i」」者。
			加「纍加器」以一。昔之「纍加器」者。今其是矣。
		云云。
		若「字」等於「「d」」者。
			減「纍加器」以一。昔之「纍加器」者。今其是矣。
		云云。
		若「字」等於「「s」」者。
			乘「纍加器」以「纍加器」。昔之「纍加器」者。今其是矣。
		云云。
		若「字」等於「「o」」者。
			吾有一言。曰「纍加器」。書之。
		云云。
		若「纍加器」等於二百五十六者。
			昔之「纍加器」者。今零是矣。
		云云。
		若「纍加器」等於負一者。
			昔之「纍加器」者。今零是矣。
		云云。
	云云。
是謂「死魚」之術也。
注曰「「問天地好在（數字）」」。
施「死魚」於「「iiisdsiiiiiiiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiooiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddodddddddddddddddddddddsddoddddddddoiiioddddddoddddddddodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddo」」。
吾有一言。曰「「========================」」。書之。
注曰「「XKCD隨機數」」。
施「死魚」於「「iiso」」。
吾有一言。曰「「========================」」。書之。
注曰「「必要測試」」。
施「死魚」於「「iissso」」。注曰「「零」」。
施「死魚」於「「diissisdo」」。注曰「「二百八十八」」。
施「死魚」於「「iissisdddddddddddddddddddddddddddddddddo」」。注曰「「零」」。
===Error handling example===
姑妄行此。
	有數二十五。名之曰「Integer」。
	吾有一數。曰「IntegEr」。書之。
	批曰。「「此处并没有定义什么IntegEr，而是Integer，这会引发NameError错误。」」
如事不諧。豈「「虛指」」之禍歟。
	吾有一言。曰「「本無此物，奈何用之？」」。書之。
豈「「文法」」之禍歟。
	吾有一言。曰「「不合文法，不通之甚。」」。書之。
豈「「異類」」之禍歟。
	吾有一言。曰「「物各其類。豈可混同？」」。書之。
豈「「滅頂」」之禍歟。
	吾有一言。曰「「嗚呼哀哉！伏维尚飨！」」。書之。
不知何禍歟。名之曰「奇禍」。
	吾有一言。曰「「人坐家中，禍從天降。」」。書之。
乃作罷。
=== 非也。(Nope.) Interpreter ===
吾嘗觀『閱文秘術』之書。方悟「閱行」之義。
吾嘗觀『交互秘術』之書。方悟「輸出」之義。
寫「「Nope > 」」焉。
閱一行。噫。
吾有一言。曰「「非也。」」。書之。
This requires a Node.js runtime and the stdin and jiaohu libraries from wyg.
== External resources ==
* GitHub: https://github.com/LingDong-/wenyan-lang
* Interpreter: https://www.npmjs.com/package/@wenyanlang/core
* Online IDE: https://ide.wy-lang.org/
* An explanation of this programming language in Chinese | More about this programming language
Category:Languages
Category:Implemented
Category:Turing complete
Category:CJK
Category:2019