数据蒋堂 | 常规遍历语法

简介:

遍历可以说是最基本的集合运算了,比如求和、计数、寻找最大最小值等聚合运算,按条件过滤集合、根据集合成员生成另一个新集合,也都是遍历运算。集合化语法要求我们能用很短的语句(经常就只有一句,而不是若干语句构成的一段程序)来描述大部分遍历运算,这样我们需要考查遍历运算中可能出现的各种常见情况,并设计出合理自治的语法规则。

image

我们从简单到复杂来考查遍历运算中的可能情况,并讨论SQL语法在这方面的表现。

image

比如计算集合成员的合计。

这是最简单的情况,采用普通的函数语法风格就可以,将待遍历的集合作为参数获得返回值,比如sum(A)用于计算集成A成员的合计,当然也可以使用对象式的语法风格写成A.sum()。

image

比如我们不是要计算集合成员的合计,而是要计算平方和,那么这个平方该如何描述?

这就会用到我们在谈集合化语法时提到的lambda语法。平方这个运算本质上是一个函数,在遍历过程中它以被遍历集合的当前成员作为参数,返回该参数的平方。而lambda语法允许将这个函数以表达式的形式并一起写入整个计算遍历运算式,一个语句就可以完成。但这里就有一个问题,我们在这个lambda表达式中用什么标识符或符号表示这个当前成员呢?

显然,像普通函数那个先定义参数名不是个好办法,那会让lamdba表达式写得很臃肿,失去lambda语法的简洁性。尽管有些程序设计语言确实是这么做的,不过我们并不提倡。使用一个固定的标识符也不好,太长了用起来不方便,太短又很可能与其它局部变量重名导致歧义。我们提倡在这里使用一个特殊符号来完成这个目的。

比如使用~表示当前成员时,平方和就可以写成A.sum(~~),简单易懂。也可以分两步做,先计算出集合成员的平方构成一个新集合,再计算新集合的合计,写成类似A.(~~).sum()的形式,后一步不再需要~写法,前一步仍需要~写法来描述平方这个表达式函数。

image

但是,我们发现,被认为是集合化语言的SQL中并没有使用某个符号或标识符来表示当前遍历成员,那么SQL又是怎么解决上一部分的第二个问题的呢?

事实上,SQL并没有普通意义上可由任何成员构成的集合。SQL的集合就是表,而表的成员都是相同结构的记录。SQL体系中有记录这个概念,但并不能把记录作为一种数据类型来引用。如果我们要在SQL中针对一个单值成员的集合进行遍历,也只能把单值做成只有一个字段的记录,而针对这些记录构成的表进行遍历。所有计算都是针对某些字段进行的,而不能针对整条记录。

但这和SQL没有表示当前成员的符号有什么关系呢?

我们在前面说集合化语法时还提到,面向结构化数据计算的集合化语法需要有简洁的方式引用字段,SQL提供了可以直接引用字段的便捷机制,而SQL又只能计算字段,那就可以不必再提供引用当前成员(记录)的手段了。比如SQL中计算平方和一定是某个字段的平方和,而整条记录(集合成员)的平方则没有意义。

SQL牺牲了集合的表达能力而简化了语法。对于能够支持泛型成员构成集合的语言来讲,~写法就是必要的了。而且,如果用于结构化数据计算时,SQL这种可以直接字段的写法也要得到支持才会方便,计算某销售帐目的金额时写成"~.单价~.数量"显然不如写成"单价数量“更为简单直观,好的程序语言应当借鉴SQL这种风格。

image

遍历在本质上就是一个循环,而循环语句可能有多层,这样遍历也可能会有嵌套引用。比如计算A,B两个集合的交集,简单的算法就是遍历A的成员,看是不是在B集合中出现过(也是遍历),这就会涉及到两层的遍历。

这时候~写法就会产生歧义了,~到底是指A集合还是B集合的当前成员,这需要在语法规则上做一个明确的约定。

一般采用的是就近原则,即如果没有指明~是哪个集合的,那缺省认为是内层遍历集合的,而外层遍历集合的当前成员则需要显式地指出其从属于哪个集合。计算交集的表达式就可以写成A.select(B.count(~==A.~)>0),其中的~缺省表示B的当前成员,而另一个要显式地写成A.~以示区分。

面向结构化数据计算时可以直接引用字段名,这时也可能产生内外层的歧义,也可以适用于就近原则,SQL就是这样。当内外层表有相同字段名时,则缺省被认为是内存表的字段,引用外层表的同名字段时必须显式地写上表名;如果内外存表中没有相同字段名,则可以正确识别出来而不必书写表名。

image

遍历运算虽然很基本,但设计其语法时仍有一些注意事项。SQL在这方面总体表现不错,除了缺乏泛型成员的集合外,用于描述常规遍历运算还是比较方便简捷的。

image

清华大学计算机硕士,著有《非线性报表模型原理》等,1989年,中国首个国际奥林匹克数学竞赛团体冠军成员,个人金牌;2000年,创立润乾公司;2004年,首次在润乾报表中提出非线性报表模型,完美解决了中国式复杂报表制表难题,目前该模型已经成为报表行业的标准;2014年,经过7年开发,润乾软件发布不依赖关系代数模型的计算引擎——集算器,有效地提高了复杂结构化大数据计算的开发和运算效率;2015年,润乾软件被福布斯中文网站评为“2015福布斯中国非上市潜力企业100强”;2016年,荣获中国电子信息产业发展研究院评选的“2016年中国软件和信息服务业十大领军人物”;2017年, 自主创新研发新一代的数据仓库、云数据库等产品即将面世。

image

《数据蒋堂》的作者蒋步星,从事信息系统建设和数据处理长达20多年的时间。他丰富的工程经验与深厚的理论功底相互融合、创新思想与传统观念的相互碰撞,虚拟与现实的相互交织,产生出了一篇篇的沥血之作。此连载的内容涉及从数据呈现、采集到加工计算再到存储以及挖掘等各个方面。大可观数据世界之远景、小可看技术疑难之细节。针对数据领域一些技术难点,站在研发人员的角度从浅入深,进行全方位、360度无死角深度剖析;对于一些业内观点,站在技术人员角度阐述自己的思考和理解。蒋步星还会对大数据的发展,站在业内专家角度给予预测和推断。静下心来认真研读你会发现,《数据蒋堂》的文章,有的会让用户避免重复前人走过的弯路,有的会让攻城狮面对扎心的难题茅塞顿开,有的会为初入行业的读者提供一把开启数据世界的钥匙,有的甚至会让业内专家大跌眼镜,产生思想交锋。

原文发布时间为:2017-09-13
本文作者:蒋步星
本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
20天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
32230 117
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
9天前
|
应用服务中间件 API 网络安全
3分钟汉化OpenClaw,使用Docker快速部署启动OpenClaw(Clawdbot)教程
2026年全新推出的OpenClaw汉化版,是基于Claude API开发的智能对话系统本土化优化版本,解决了原版英文界面的使用壁垒,实现了界面、文档、指令的全中文适配。该版本采用Docker容器化部署方案,开箱即用,支持Linux、macOS、Windows全平台运行,适配个人、企业、生产等多种使用场景,同时具备灵活的配置选项和强大的扩展能力。本文将从项目简介、部署前准备、快速部署、详细配置、问题排查、监控维护等方面,提供完整的部署与使用指南,文中包含实操代码命令,确保不同技术水平的用户都能快速落地使用。
4727 4
|
15天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
6829 18
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
14天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
4795 11
|
16天前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
5680 21
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
|
12天前
|
人工智能 JavaScript 安全
Claude Code 安装指南
Claude Code 是 Anthropic 推出的本地 AI 编程助手,支持 Mac/Linux/WSL/Windows 多平台一键安装(Shell/PowerShell/Homebrew/NPM),提供 CLI 交互、代码生成、审查、Git 提交等能力,并内置丰富斜杠命令与自动更新机制。
4290 0
|
16天前
|
存储 人工智能 机器人
OpenClaw是什么?阿里云OpenClaw(原Clawdbot/Moltbot)一键部署官方教程参考
OpenClaw是什么?OpenClaw(原Clawdbot/Moltbot)是一款实用的个人AI助理,能够24小时响应指令并执行任务,如处理文件、查询信息、自动化协同等。阿里云推出的OpenClaw一键部署方案,简化了复杂配置流程,用户无需专业技术储备,即可快速在轻量应用服务器上启用该服务,打造专属AI助理。本文将详细拆解部署全流程、进阶功能配置及常见问题解决方案,确保不改变原意且无营销表述。
6248 6
|
18天前
|
人工智能 JavaScript 应用服务中间件
零门槛部署本地AI助手:Windows系统Moltbot(Clawdbot)保姆级教程
Moltbot(原Clawdbot)是一款功能全面的智能体AI助手,不仅能通过聊天互动响应需求,还具备“动手”和“跑腿”能力——“手”可读写本地文件、执行代码、操控命令行,“脚”能联网搜索、访问网页并分析内容,“大脑”则可接入Qwen、OpenAI等云端API,或利用本地GPU运行模型。本教程专为Windows系统用户打造,从环境搭建到问题排查,详细拆解全流程,即使无技术基础也能顺利部署本地AI助理。
7769 17