SQL函数式编程的本质

TheMatrix
楼主 (未名空间)

函数式编程的本质,well,有很多方面,从形式方面来说,就是没有mutable的变量。
可以有作为临时记录的变量,比如CTE记录一遍pass的结果,但是不能改,在此之上的
处理,如果要记录结果,必须记录为不同的名字,不能再重用这个名字。

其实程序的本质就是对初始数据一遍一遍的处理。大多数情况下,对数据处理一遍,记录一个名字,在此之上再处理一遍,再记录一个名字,不需要复用前面的名字。唯一需要复用前面的名字,也就是需要mutable变量的情况,是处理的遍数不确定,需要一个
循环,循环有一个结束条件,而不是固定遍数的。也就是说这个循环变量是需要
mutable的。

SQL查询中没有循环,而是以递归CTE代替循环。递归在形式上不是一个循环,因此也不需
要mutable循环变量。也就是说SQL只能进行函数式编程。但它也是图灵完备的了,也就是其他通用编程语言能干的事,SQL查询也能干。这是对字符串,或者list of 字符串
的处理来说。