编程的初学者们一定会纳闷:为什么编程语言大都是英文的呢?有没有能用我们都能看懂的中文就能写代码的方式呢?中华文化博大精深,如《九章算术》这样的典籍,就能够用古老的文言文,简洁而又优雅地描述复杂的数学问题,那么,是不是也可以用文言文来描述计算机程序呢?Wenyan (文言),就创新性地使用中文文言文设计了一门编程语言,以类似于古文典籍的方式,编写计算机程序。

Wenyan


简介

Wenyan 文言,是 wenyan-lang 组织在 Github 上开源的中文文言文编程语言,目前版本为 v0.3.4,仓库位于 。

Wenyan(文言)是一门图灵完备的计算机编程语言,语言字符集基本由中文和中文符号组成,使用古汉语文言文的方式表示程序逻辑,使用符合古汉语语法的自然语言处理程序。Wenyan 可以编译成 JavaScript、Python 或 Ruby 语言,语法简单,通过几个例子即可快速入门。Wenyan 还提供了在线 IDE,以及主流编辑器的插件,如 VsCode、Vim、Sublime Text 等,开发十分方便。

Wenyan

使用

Wenyan 提供了使用 JavaScript 编写的编译器,使用 NPM 安装:

npm install -g @wenyan/cli

安装完成后,可以在命令行运行例子:

wenyan example

上述命令会运行 ,输出

問天地好在。

Wenyan 还提供了在线 IDE,方便尝试使用。

Wenyan

我们来看 Wenyan 语言的简单例子:

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

你没有看错,以上的确是一个可运行的代码脚本。全文使用中文(繁体)和中文标点符号,十分接近实际的古文。粗略地理解文言文字面意思,就是说:有一个数字,命名为「甲」,数值为 3;重复三遍,书写 「問天地好在。」这一句子,然后结束。上述 Wenyan代码等价于以下的 JavaScript 代码:

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

把上述的 Wenyan 代码保存为 ,运行 wenyan ,输出:

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

标点符号和换行都是可选的(就像古汉语中文字是连续的),所以上面的代码等同于:

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

作为一门图灵完全的计算机语言,Wenyan 同样拥有许多计算机语言的特性。Wenyan

  • 动态类型语言,基本类型包括:数字、布尔、字符串、列表等
  • 支持变量定义和赋值
  • 支持流程控制,拥有等价于其他语言中的 if、for、while、break 等语法
  • 支持运算,包括数学计算、逻辑操作 等
  • 包括复合数据结构,包括数组和对象
  • 拥有函数、模块导入、宏、错误处理、注释等

我们来看具体的语法。变量定义,都以 “吾有...” 的格式定义

吾有一數。曰三。名之曰「甲」。

类比 JavaScript 的

var a = 3;

流程控制 if ,则用 “若 ... 乃得” 的形式

若三大於二者。乃得「「想當然耳」」也。

类比 JavaScript 的

if (3>2){ return "of course"; }

数学运算,则跟日常用语相似:

加一以二。乘其以三。

等价于 JavaScript 的

(1+2)*3

我们来看稍微复杂一些的 Wenyan 代码。以下的代码,实现了一个计算斐波那契数列的函数,并计算斐波那契数列的第 12 位:

吾有一術。名之曰「斐波那契」。欲行是術。必先得一數。曰「甲」。乃行是術曰。 若「甲」等於零者乃得零也 若「甲」等於一者乃得一也 減「甲」以一。減「甲」以二。名之曰「乙」。曰「丙」。 施「斐波那契」於「乙」。名之曰「丁」。 施「斐波那契」於「丙」。名之曰「戊」。 加「丁」以「戊」。名之曰「己」。 乃得「己」。 是謂「斐波那契」之術也。 施「斐波那契」於十二。書之。

代码中,使用了 “吾有一術” 的形式定义函数,实现了递归形式的斐波数列计算函数。

我们再来看更为复杂的代码,使用 Wenyan 实现快速排序算法:

吾有一術。名之曰「快排」。欲行是術。必先得一列。曰「甲」。乃行是術曰。 若「甲」之長不大於一者。 乃得「甲」 也。 吾有三列。名之曰「首」。曰「頷」。曰「尾」。 夫「甲」之一。名之曰「甲一」。 充「頷」以「甲一」。 夫「甲」之其餘。名之曰「甲餘」。 凡「甲餘」中之「丁」。 若「丁」小於「甲一」者。 充「首」以「丁」。 若非。 充「尾」以「丁」 也。 云云。 施「快排」於「首」。昔之「首」者。今其是矣。 施「快排」於「尾」。昔之「尾」者。今其是矣。 銜「首」以「頷」以「尾」。名之曰「乙」。 乃得「乙」。 是謂「快排」之術也。 吾有一列。名之曰「己」。 充「己」以五。以三。以二十。以八。以三十五。以七百。 施「快排」於「己」。書之。

上述代码,实现了快速排序算法,并对数组 [5, 3, 20, 8, 35, 700] 进行排序。

Wenyan


总结

Wenyan 文言,创新性地使用中文文言文设计了一门图灵完全的编程语言,以类似于古文典籍的方式,编写计算机程序,像我们展示了文言文的简洁优雅,和强大的表达能力。诚然,Wenyan 基本难以作为一门在实践中应用的通用编程语言,但其不失为计算机语言领域的一个优秀项目,其接近自然语言的语法设计令人为印象深刻,展现了开发者对于计算机和传统语言文化的热爱。

Wenyan