看帖神器
未名空间
追帖动态
头条新闻
每日新帖
最新热帖
新闻存档
热帖存档
文学城
虎扑论坛
未名空间
北美华人网
北美微论坛
看帖神器
登录
← 下载
《看帖神器》官方
iOS App
,体验轻松追帖。
SQL函数式编程的本质
查看未名空间今日新帖
最新回复:2021年8月22日 8点40分 PT
共 (1) 楼
返回列表
订阅追帖
只看未读
更多选项
阅读全帖
只看图片
只看视频
查看原帖
T
TheMatrix
2 年多
楼主 (未名空间)
函数式编程的本质,well,有很多方面,从形式方面来说,就是没有mutable的变量。
可以有作为临时记录的变量,比如CTE记录一遍pass的结果,但是不能改,在此之上的
处理,如果要记录结果,必须记录为不同的名字,不能再重用这个名字。
其实程序的本质就是对初始数据一遍一遍的处理。大多数情况下,对数据处理一遍,记录一个名字,在此之上再处理一遍,再记录一个名字,不需要复用前面的名字。唯一需要复用前面的名字,也就是需要mutable变量的情况,是处理的遍数不确定,需要一个
循环,循环有一个结束条件,而不是固定遍数的。也就是说这个循环变量是需要
mutable的。
SQL查询中没有循环,而是以递归CTE代替循环。递归在形式上不是一个循环,因此也不需
要mutable循环变量。也就是说SQL只能进行函数式编程。但它也是图灵完备的了,也就是其他通用编程语言能干的事,SQL查询也能干。这是对字符串,或者list of 字符串
的处理来说。
请输入帖子链接
收藏帖子
函数式编程的本质,well,有很多方面,从形式方面来说,就是没有mutable的变量。
可以有作为临时记录的变量,比如CTE记录一遍pass的结果,但是不能改,在此之上的
处理,如果要记录结果,必须记录为不同的名字,不能再重用这个名字。
其实程序的本质就是对初始数据一遍一遍的处理。大多数情况下,对数据处理一遍,记录一个名字,在此之上再处理一遍,再记录一个名字,不需要复用前面的名字。唯一需要复用前面的名字,也就是需要mutable变量的情况,是处理的遍数不确定,需要一个
循环,循环有一个结束条件,而不是固定遍数的。也就是说这个循环变量是需要
mutable的。
SQL查询中没有循环,而是以递归CTE代替循环。递归在形式上不是一个循环,因此也不需
要mutable循环变量。也就是说SQL只能进行函数式编程。但它也是图灵完备的了,也就是其他通用编程语言能干的事,SQL查询也能干。这是对字符串,或者list of 字符串
的处理来说。