Back to skills
SKILL.md
Dolphindb Functional Programming
ASecurity在编写、优化、解释 DolphinDB / DolphinScript 代码时应用此函数式编程规则集。 适用于高阶函数、函数模式、函数运算符、链式表达、eachAt/at 映射调用、lambda、部分应用、动态函数调用、模块与函数视图相关任务。 当任务需要以函数为主要组织单位处理数据、组合函数或组织函数接口时使用。
- 8 stars
- 0 votes
- 0 copies
- 2 views
- Added September 6, 2026
Security analysis
100/100Pro scans all 5 files and shows the line behind each finding
npx -y skills add dolphindb/DolphinX_Skill --skill dolphindb-functional-programming --agent claude-codeAre you the author of Dolphindb Functional Programming?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/dolphindb-dolphindb-functional-programming)---
name: dolphindb-functional-programming
description: >
在编写、优化、解释 DolphinDB / DolphinScript 代码时应用此函数式编程规则集。
适用于高阶函数、函数模式、函数运算符、链式表达、eachAt/at 映射调用、lambda、部分应用、动态函数调用、模块与函数视图相关任务。
当任务需要以函数为主要组织单位处理数据、组合函数或组织函数接口时使用。
---
# DolphinDB 函数式编程
## 使用流程
按以下流程使用本 skill:
1. 判断任务是否属于 DolphinDB / DolphinScript 函数式编程;若输入不是 DolphinDB 代码或相关设计问题,回复“请提供 DolphinDB 脚本或函数式编程设计上下文。”
2. 明确函数类别、输入对象、输出形态和调用位置。
3. 根据任务类型选择参考文件:
- 场景 01:函数作用在数据上
- 场景 02:函数作用在函数上
- 场景 03:函数作用在函数集合或接口上
4. 按场景文件选择高阶函数、函数模式、部分应用、动态调用、模块或函数视图。
5. 代码完成后,检查输出长度、对象维度、参数绑定顺序和副作用位置。
## 总规则
### 规则 01:确定函数类别与默认输出形态
区分当前函数是标量函数、聚合函数还是向量函数,再判断它作用于向量、表、矩阵、元组、字典后的默认行为。`byRow`、`byColumn`、`each`、函数模式和其他承载入口,都应基于函数类别与输出形态选择。
- 标量函数:输出只依赖当前位置,作用到复杂对象时通常逐元素展开。
- 聚合函数:输入是一批数据,输出一个归约结果;作用到表和矩阵时,常见默认行为是按列聚合。
- 向量函数:输入和输出都保留序列结构,位置关系会影响结果,例如 `prev`、`cumsum`、`mavg`。
### 规则 02:优先采用内置入口、高阶函数和函数模式
内置函数通常已经定义对象级行为。自定义函数进入表、矩阵、窗口或分组对象时,应显式指定高阶函数或函数模式。编写自定义循环前,应检查是否已有现成入口。向量级自定义函数进入二维对象时,应明确采用按列还是按行应用。
### 规则 03:用链式表达呈现调用顺序
多步处理优先使用从左到右的链式表达,使调用顺序、书写顺序和阅读顺序一致。高阶函数嵌套过深时,优先改用函数模式,将高阶函数调用转为链式入口。
常用映射关系如下:
| 高阶函数 | 函数模式 | 作用 |
| --- | --- | --- |
| `each` | `:E` | 逐项遍历 |
| `loop` | `:U` | 逐项遍历并保留元组结果 |
| `eachLeft` | `:L` | 遍历左侧元素 |
| `eachRight` | `:R` | 遍历右侧元素 |
| `cross` | `:C` | 遍历左右组合 |
| `eachPre` | `:P` | 遍历当前元素和前一个元素 |
| `eachPost` | `:O` | 遍历当前元素和后一个元素 |
| `byRow` | `:H` | 按行处理 |
| `byColumn` | `:V` | 按列处理 |
| `accumulate` | `:A` | 输出每一步结果 |
| `reduce` | `:T` | 输出最终结果 |
| `groupby` | `:G` | 分组聚合计算 |
| `contextby` | `:X` | 分组向量计算 |
### 规则 04:默认保持无副作用函数风格
自定义函数参数默认不可修改。只有需要状态推进或原地修改时,才显式使用 `mutable`。涉及状态修改时,应说明状态对象的位置、生命周期,以及不能改写为无状态表达的原因。
### 规则 05:明确输入拆分方式与结果合并方式
选择 `each`、`byRow`、`byColumn`、`reduce`、`accumulate`、`groupby`、`contextby` 前,应明确输入对象如何拆分、每次调用接收什么参数、多个调用结果如何合并。
### 规则 06:区分终值输出与全路径输出
只需要最终结果时,优先选择 `reduce` 一类终值入口;需要保留每一步结果时,优先选择 `accumulate` 一类全路径入口。该判断直接影响函数选型和输出长度。
### 规则 07:检查函数运算符优先级
函数运算符与普通运算符的优先级不完全一致。`neg`、`not` 等函数运算符进入复合表达式时,应检查实际绑定关系。存在歧义时,改用链式表达或普通函数调用。
### 规则 08:按需求引入动态调用、模块和函数视图
`call`、`makeCall`、模块和函数视图分别解决动态调用、调用代码生成、函数集合复用、接口发布和权限控制问题。当前任务仅涉及局部表达式实现时,不应引入这些机制。
### 规则 09:区分映射调用中的逐维处理与整体处理
函数、字典、向量、矩阵和表都可以作为映射对象。`eachAt` / `@` 将多维索引中的每一维分别处理,`at` / `[]` 将索引整体处理。映射对象是函数时,`at` 等价于按实参集合调用函数;单个实参本身是元组时,需要用 `enlist` 包装。
### 规则 10:函数模式叠用按从左到右的顺序解释
一个函数同时带有多个函数模式时,按从左到右的顺序应用模式。修改模式顺序会改变任务拆分顺序、结果排列顺序和后续合并形态。涉及 `:L:R`、`:R:L`、`:E:E` 这类写法时,应单独说明每一层模式处理的对象。
## 场景划分
### 场景 01:函数作用在数据上
任务涉及批量元素处理、行列方向计算、递推过程、分组窗口或多步数据变换时,阅读 [references/scene-01-函数作用在数据上.md](references/scene-01-函数作用在数据上.md)。
### 场景 02:函数作用在函数上
任务涉及 lambda、匿名函数、部分应用、函数对象传递、动态获取函数或动态生成函数调用代码时,阅读 [references/scene-02-函数作用在函数上.md](references/scene-02-函数作用在函数上.md)。
### 场景 03:函数作用在函数集合或接口上
任务涉及模块、函数视图、函数发布、命名空间、授权或跨节点复用时,阅读 [references/scene-03-函数作用在函数集合或接口上.md](references/scene-03-函数作用在函数集合或接口上.md)。
## 参考文件
1. [references/scene-01-函数作用在数据上.md](references/scene-01-函数作用在数据上.md)
提供高阶函数、函数模式、函数模式叠用、映射调用、链式表达和典型数据处理案例。
2. [references/scene-02-函数作用在函数上.md](references/scene-02-函数作用在函数上.md)
提供 lambda、匿名函数、函数运算符、部分应用、动态函数调用和元编程案例。
3. [references/scene-03-函数作用在函数集合或接口上.md](references/scene-03-函数作用在函数集合或接口上.md)
提供模块、函数视图及其适用边界。
## 输出要求
根据任务类型选择输出模式,输出内容保持简洁。
1. 概念解释
输出至少包含:概念定义、与相近概念的区别、一个简短例子。
2. 路线判断
输出至少包含:当前任务类别、推荐函数或函数模式、选择理由、仍需确认的前提。
3. 代码改写
输出至少包含:当前写法的问题、推荐函数或函数模式、改写代码。若现有代码已经符合函数式组织方式,直接说明无需改写,并给出简短理由。
4. 组织方式建议
输出至少包含:当前需求更适合模块还是函数视图、理由、部署或权限注意事项。
Files in this skill
- SKILL.md
- agents/openai.yaml
- references/scene-01-函数作用在数据上.md
- references/scene-02-函数作用在函数上.md
- references/scene-03-函数作用在函数集合或接口上.md
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.