📝 docs(tsl-syntax-reference): document verified facts from FAQ corpus
从 FAQ 语料(2018 篇镜像)与参考页做完 169 条逐条差集,补入 6 组此前未收录的语言 事实。每条先用 TSL.exe 实跑观察行为,再收敛成 39 条断言的回归门,在 TSLGen2、 AnalyseNG.NET、TSL 三个解释器上均通过后才写入。 - 16 页:0/0 得 nan、2/0 得 inf;nan 的 = > < >= <= 恒假而 <> 为真;nan 沿算术 传播;nil 在乘除减里按 0 参与 - 04 页:整体赋值免声明,但对未建立的变量写单元格赋值会报「变量类型不是Array」 - 07 页:相邻两个 if 是两条独立语句都会执行;for..in 单控制变量拿到的是键不是值; 二维数组按行推进,行本身是数组(新增 syntax-07-013) - 21 页:子矩阵赋值语句求值为 0;t[:,:] 按位置复制不按列名对齐(新增 syntax-21-019);| 列并时同名字符串列键由右操作数覆盖(新增 syntax-21-018) - 13 页:select 输出列表同名列后者覆盖前者,须用 as 改名(新增 syntax-13-032) 三条 FAQ 说法实跑不复现,故未写入:12574 的括号消歧、19857 的 -2147483648 字面量限制、31474 的 :. bugfix 记录。15305/11045 的用户/公用/共享函数同名解析 优先级需要服务端多账号环境,本地无法验证,仍为已知缺口。 lexicon.json 为 16 页补两个页级 alias,使 nan/nil 语义能被自然语言查询命中。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,8 @@
|
||||
|
||||
- 默认变量模型是“直接赋值即得到变量”,不要求先写 `var`。
|
||||
- 例如:`a := 1; b := array(1, 2, 3);` 这种写法可直接编译。
|
||||
- 这条只覆盖整体赋值;对还没建立的变量直接写单元格赋值(`q[0][0] := 1;`)会在运行时报
|
||||
`变量类型不是Array`,要先用 `q := array();` 建立容器再写下标。
|
||||
- `var name;` 只作为显式声明写法,不能当成默认必需步骤。
|
||||
- `const name = value;` 是常量初始化的默认生成写法;`const` 不能只声明名字而不初始化。
|
||||
- 文档规则:
|
||||
@@ -73,6 +75,40 @@ var a;
|
||||
a := 1;
|
||||
```
|
||||
|
||||
整体赋值免声明,但单元格赋值不免——容器要先建立:
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
|
||||
```tsl
|
||||
whole := rand(3, 3);
|
||||
writeLn(mRows(whole));
|
||||
cell := array();
|
||||
cell[0][0] := 1;
|
||||
writeLn(cell[0][0]);
|
||||
```
|
||||
|
||||
结果说明:
|
||||
|
||||
- 依次输出 `3`、`1`
|
||||
- `whole := rand(3, 3)` 说明整体接一个数组不需要先声明
|
||||
- `cell := array();` 这一行不能省;省掉后 `cell[0][0] := 1;` 会在运行时报
|
||||
`变量类型不是Array`,因为下标赋值需要一个已经是数组的容器
|
||||
|
||||
代码块身份:输出片段
|
||||
|
||||
```text
|
||||
3
|
||||
1
|
||||
```
|
||||
|
||||
代码块身份:反例 / 不可照写
|
||||
|
||||
```text
|
||||
q[0][0] := 1;
|
||||
```
|
||||
|
||||
对还没建立的变量直接写单元格赋值会运行时报 `变量类型不是Array`;先写 `q := array();`。
|
||||
|
||||
`{$explicit+}` 下的显式声明:
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -393,6 +429,7 @@ items := array(1, 2, 3);
|
||||
<!-- section-id: syntax-04-008 -->
|
||||
|
||||
- 以为普通变量必须先写 `var` 才能使用。
|
||||
- 把“整体赋值免声明”推广到单元格赋值,直接对未建立的变量写 `q[0][0] := 1;`。
|
||||
- 把常量初始化写成普通变量赋值风格。
|
||||
- 以为 `const =` 顶层单独写一行就一定成立。
|
||||
- 以为 `const` 可以只声明名字,不写初始化表达式。
|
||||
|
||||
Reference in New Issue
Block a user