feat(tsl-syntax-reference): harden retrieval contracts

Add stable section IDs, structural and routing regressions, quickstart consistency checks, and CI enforcement.

BREAKING CHANGE: replace heading-derived Section IDs with explicit syntax-NN-NNN identifiers.
This commit is contained in:
csh
2026-07-31 10:05:15 +08:00
parent 21e688a436
commit 736d1a8ad7
30 changed files with 1635 additions and 137 deletions
@@ -4,10 +4,14 @@
## 本篇职责
<!-- section-id: syntax-21-001 -->
回答“怎样直接构造全零矩阵、全一矩阵、随机矩阵、单位矩阵、空矩阵和数列数组,怎样写矩阵逆/广义逆,怎样进行矩阵乘除乘方,怎样转置矩阵,怎样拼接矩阵,怎样拿到矩阵的行数、列数、行索引和列索引,怎样遍历矩阵、取/改子矩阵,以及怎样用 `mfind` 找到或替换符合条件的单元格”。
## 核心规则
<!-- section-id: syntax-21-002 -->
本页示例只说明矩阵语法中的调用位置、运算结构和源码外形。矩阵 API 的精确签名、参数、返回行为、平台 scope、目标环境或解释器可用性必须使用 `tsl-api-reference` skill 重新核对,不能由本页示例反推。
- 矩阵初始化和基础函数的具体参数规格使用 `tsl-api-reference` skill 按名查询;本页只保留矩阵行为示例、返回形态边界和跨函数通用的广播 / `ErrDefine` / `ErrReplace` 机制。
@@ -38,8 +42,12 @@
## 可直接照写示例
<!-- section-id: syntax-21-003 -->
### 矩阵初始化
<!-- section-id: syntax-21-004 -->
<!-- tags: 建矩阵, 全零矩阵, 全一矩阵, 单位阵, 初始化二维 -->
代码块身份:可直接照写示例
@@ -77,6 +85,8 @@ writeLn(mcols(zeros_2d));
### `->` 数列数组初始化
<!-- section-id: syntax-21-005 -->
<!-- tags: 生成序列, 等差数列, 从几到几, 连续数字 -->
默认步长为 `1`
@@ -119,6 +129,8 @@ seq_indexed := array(0, 1, array("A", "B", "C", "D", "E", "F")) -> 5;
### 矩阵一元倒数 / 逆 / 广义逆:`!A`
<!-- section-id: syntax-21-006 -->
<!-- tags: 求逆, 逆矩阵, 广义逆, 解方程 -->
方阵输入返回普通矩阵逆:
@@ -186,6 +198,8 @@ writeLn(inverse_value[2][1]);
### `msize`、`mrows`、`mcols`
<!-- section-id: syntax-21-007 -->
<!-- tags: 矩阵几行几列, 尺寸, 维度大小, 行数列数 -->
代码块身份:可直接照写示例
@@ -215,6 +229,8 @@ col_index := mcols(matrix_rows, 1);
### 矩阵遍历:`::` 与 `::=`
<!-- section-id: syntax-21-008 -->
<!-- tags: 遍历矩阵, 逐格处理, 二维循环, 批量赋值 -->
`::` 执行语句块:
@@ -267,6 +283,8 @@ writeLn(matrix_value[1][1]);
### 深度遍历:`:.` 与 `:.=`
<!-- section-id: syntax-21-009 -->
<!-- tags: 遍历嵌套数组, 递归遍历, 最深层元素 -->
`:.` 会遍历到嵌套数组的最深节点:
@@ -310,6 +328,8 @@ writeLn(values[2]);
### 子矩阵
<!-- section-id: syntax-21-010 -->
<!-- tags: 取一块, 切片, 按行列范围取, 局部矩阵 -->
按行列范围提取:
@@ -406,6 +426,8 @@ writeLn(matrix_value[1][1]);
### `mfind` 与 `mfindSparse`
<!-- section-id: syntax-21-011 -->
<!-- tags: 在矩阵里查找, 找位置, 满足条件的下标, 稀疏查找 -->
一维数组无条件查找会返回一维下标数组:
@@ -528,6 +550,8 @@ B
### 矩阵乘法、除法、左除、乘方:`:*`、`:/`、`:\`、`:^`
<!-- section-id: syntax-21-012 -->
<!-- tags: 矩阵相乘, 矩阵乘方, 左除, 区别于逐元素乘 -->
`:*` 是矩阵乘法(区别于逐元素乘 `*`):
@@ -658,6 +682,8 @@ writeLn(a[0][0]);
### 基础函数的矩阵广播与无效输入替换参数
<!-- section-id: syntax-21-013 -->
<!-- tags: 对整个矩阵取整, 函数作用于每个元素, 广播, 出错时给默认值, 无效输入替换, errdefine, errreplace -->
多参数基础函数支持逐参数广播:
@@ -757,6 +783,8 @@ array(1,-999,-999,100)
### 矩阵转置:反引号 `` ` ``
<!-- section-id: syntax-21-014 -->
<!-- tags: 转置, 行列互换, 翻转矩阵 -->
单次转置交换行列:
@@ -839,6 +867,8 @@ writeLn("行向量 (0,2):", row_vector[0][2]);
### 矩阵拼接:`union`、`&=`、`|`、`:|`
<!-- section-id: syntax-21-015 -->
<!-- tags: 拼接矩阵, 上下合并, 左右合并, 追加行 -->
`union` 按行拼接(一维或二维):
@@ -935,6 +965,8 @@ bar 结果 (1,2):2
## 默认生成模板
<!-- section-id: syntax-21-016 -->
需要矩阵构造时,优先从这个最短模板开始:
代码块身份:可直接照写示例
@@ -945,6 +977,8 @@ matrix_value := zeros(2, 3);
## 决策边界和禁止项
<!-- section-id: syntax-21-017 -->
-`eye(3)` 当成一维数组。
-`!A` 当成逻辑非表达式。
-`*` 当成矩阵乘法;矩阵乘法使用 `:*`