dolphindb-functional-programminglisted
Install: claude install-skill dolphindb/DolphinX_Skill
# 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`、`context