wenyan-lang / wenyan

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

非常有趣 #678

Open smd-1886 opened 2 years ago

smd-1886 commented 2 years ago

这是个非常有趣的事物,但总是觉得只是为其它语言加了一个中文的外壳,这感觉像用西医方法诊断,开中药药方.如果能解释易经,黄帝内经,道德经等等,我想才算是中文编程的精华.期待会有这样的支持.

UltimatePea commented 2 years ago

不知道是否有编程语言结合易经的相关研究资料

nobodxbodon commented 2 years ago

如果能解释易经,黄帝内经,道德经等等

如何”解释“,可否举个例子?

smd-1886 commented 2 years ago

只是个人一些看法,如有不妥,还请量解. 如何能用程序来表示阴阳,八卦,六十四卦,更重要的应该是如果表示这些事物之间的演化关系, 一个不恰当的比喻, 六位二进制的1,可以用来表示乾卦,同样可以表示出,坤,屯,蒙,需,讼,师等. 但卦与卦之间是有联系的,如对卦,错卦,综卦等等, 如果即可用符号表示六十四,程序的运行又能按照六十四卦的逻辑演化. 比如, 程序并不是按1+1=2这样逻辑运行, 而是一生二,二生三这样的逻辑运行. 仅仅是个人一些不成熟想法, 还请见谅.

UltimatePea commented 2 years ago

历史研究(参见维基百科):

17世纪末,德国哲学家及数学家莱布尼茨在法国传教士白晋的介绍之下,得到邵雍的伏羲先天六十四卦〈方圆四分四层图〉,认为与他所创的二元运算二进制)相符合,赞扬备至。后来演进成布尔代数

想法:

周易卦象主象形之用,错综对等关系似乎仅限代数关系,而无法表达程序的演化关系。希望可以抛转引玉。:)

编程语言中有两个组成部分:表达计算的方法以及表达数据的方法,Lambda演算与冯诺依曼计算机体系都提出可以合二为一,因此我们要探究如何用周易表达结构性数据以及演算。

表达数据:

目前主流编程语言中的数据类型仅限于inductive types with products and sums 我们可以用阴阳、五行、八卦、六十四卦分别代表sum的不同分支,每一爻代表分支内部的元素顺序,例如 data List A = Nil | Cons A (List A) 则可表示为:列=入A而 阴 阳 初 A 二 (列 A) 或者 列 = 入A 而 坤 乾 初九 A 九二 (列A)

表达计算:

如果计算可以被看成是数据到数据的函数,如果数据用八卦表示 乾巽离兑震坎艮坤 那数据到数据的一阶函数则可用六十四卦表示,举例: 星期 = 乾 一 巽 二 离 三 兑 四 震 五 坎 六 艮 日 那下一天:星期至星期(1 -> 2, 2 -> 3, ..., 7 -> 1)则可表示为: 下一天:化星期而星期 = 姤 家人 睽 随 解 蹇 大畜 (注:天风 风火 火泽 泽雷 雷水 水山 山天)

不过此方案无法处理高阶函数与递归。

究其原因是因为这些书里似乎没有scope与binding的概念。希望能听听大家的意见。

clear-sea commented 1 year ago

真是很有意思的一语言👍

UltimatePea commented 1 year ago

找到一篇相关的研究论文:Boolean Algebra and the Yijing*, https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=28dacac6bc250adf89c363c23c613afd521312f2 本文讲的是布尔代数和易经的关联,

文中的一些言论摘要: 立论之初衷:1 形式系统不仅仅是对于世界的描述,在描述中也会给我们带来新的认知和智慧,所谓 “圣人立象以尽意”(第三页上) 目的:通过对于易经的形式化探究,我们以此构造出解象的数学系统 (第三页下)

最有意思的一点是周易卦象的变化是可以被编码成周易的卦的,这或许可以使得卦象本身拥有计算的性质,文中给出的计算函数是XOR,给点输入X 输入Y,我们总是可以找到一个对于计算的编码C 使得 C XOR X = Y.

悬而未决的问题是对于计算编码的本身的不动点是否存在,或者如何去设计这样一个计算系统。如果可以成功的话,那么周易就可以与图灵机等价了。

yuxi-liu-wired commented 9 months ago

Unless you are suggesting that Yijing and the other things are literally non-Turing-computable, then it can be done.