# TSL Agent Prompt Set (ZH)

本文件只包含发送给被测 agent 的题面。

## Runner Setup

```text
You are in this repository. The documentation entry point is docs/index.md.
When asked to write TSL, start from docs/index.md and follow its routing to the
relevant TSL pages. Do not infer syntax from Pascal, TypeScript, JavaScript,
Python, or SQL.
```

## Answer Rules

```text
每个 case 独立作答。
除非题面明确要求输出 .tsf，否则默认输出可执行 .tsl 文件内容。
题面模拟普通用户的需求，不要复制文档中的样例代码。
请按题面里的名称、数据和业务动作重新编写。
如果输出 .tsl，请在题面要求的业务输出全部完成后，用 TSL 输出语句最后输出一行 __TSL__AGENT__OK__。
如果输出 .tsf，必须是 TSL 能从 funcext 加载的有效函数扩展或 unit 文件；
不要在 .tsf 中加入成功标记，成功标记由验证脚本输出。
只输出代码，不要解释。
```

## Prompts

### TSL-001: 订单折后金额

```text
请写一份 .tsl 代码：
一个订单里，单价是 19，数量是 6，优惠金额是 14。
请算出这行订单最后要收多少钱，并输出结果。
```

### TSL-002: 分页信息

```text
请写一份 .tsl 代码：
一共有 47 条记录，每页放 10 条。
请输出能装满的页数，以及最后一页还剩多少条。
```

### TSL-003: 订单编号

```text
请写一份 .tsl 代码：
把文字 "Order" 和编号 "42" 合成一个订单编号，然后输出它。
```

### TSL-004: 简单扣费

```text
请写一份 .tsl 代码：
账户余额是 12，本次扣费是 3。
请输出扣费后的余额。不要提前列出额外的变量清单。
```

### TSL-005: 固定单价

```text
请写一份 .tsl 代码：
某个商品固定单价是 9，本次买了 4 个。
请把固定单价作为常量保存，再输出总价。
```

### TSL-006: 严格模式库存

```text
请写一份 .tsl 代码：
这份脚本要开启显式变量模式。
请准备一个库存数 stock，把它设为 18，然后输出它。
```

### TSL-007: 读取分数

```text
请写一份 .tsl 代码：
有一组分数：15、30、45。
请输出第一项和最后一项。
```

### TSL-008: 读取编码字符

```text
请写一份 .tsl 代码：
编码是 "ZX9"。
请输出第一个字符和第三个字符。
```

### TSL-009: 空列表检查

```text
请写一份 .tsl 代码：
准备一个空列表 bucket。
请检查 bucket 的第一个位置是不是 nil，并输出检查结果。
```

### TSL-010: 文本数字参与计算

```text
请写一份 .tsl 代码：
有一个文本形式的数字 "58"。
请先把它变成整数，再减去 8，并输出结果。
```

### TSL-011: 温度标签

```text
请写一份 .tsl 代码：
temperature 是 32。
如果温度大于等于 30，level 就是 "hot"；否则 level 是 "normal"。
请最后输出 level。
```

### TSL-012: 余额审核

```text
请写一份 .tsl 代码：
balance 是 80。
如果 balance 大于 50，请先输出 "allow"，再扣掉 10；
否则输出 "deny"。最后输出 balance。
```

### TSL-013: 偶数累加

```text
请写一份 .tsl 代码：
请把 2、4、6、8 加起来并输出。
要求用带步长的循环完成。
```

### TSL-014: 权重检查

```text
请写一份 .tsl 代码：
weights 里有 3、5、9。
请逐个处理，每行输出“当前位置”和“这个位置的值”的乘积。
```

### TSL-015: 累加到上限

```text
请写一份 .tsl 代码：
从 n = 1 开始累加。
当 n 大于 4 时停止，最后输出累计结果。
```

### TSL-016: 跳过指定数字

```text
请写一份 .tsl 代码：
处理 1 到 5。
遇到 3 时跳过它，只累加其他数字，最后输出结果。
```

### TSL-017: 倒计时

```text
请写一份 .tsl 代码：
从 countdown = 4 开始倒数，一直到 0 停止。
请使用 repeat until，并输出最后的 countdown。
```

### TSL-018: 状态码

```text
请写一份 .tsl 代码：
status_code 是 2。
如果是 1，输出 "new"；如果是 2 或 3，输出 "active"；
其他情况输出 "closed"。
```

### TSL-019: 等级文字

```text
请写一份 .tsl 代码：
grade 是 3。
请用 case 表达式得到一段等级文字：1 是 "low"，2 到 4 是 "mid"，其他是 "high"。
最后输出这段等级文字。
```

### TSL-020: 捕获错误信息

```text
请写一份 .tsl 代码：
故意抛出 "network" 这个错误。
捕获它后，请输出错误对象里的错误信息。
```

### TSL-021: 清理动作

```text
请写一份 .tsl 代码：
先输出 "open"。
无论前面是否正常结束，最后都要输出 "close"。
请用 try/finally 完成。
```

### TSL-022: 计算数量乘积

```text
请写一份 .tsl 代码：
请做一个“计算两个整数乘积”的功能，名字由你自己取。
脚本里请用 6 和 8 调用它，并输出结果。
```

### TSL-023: 调整额度

```text
请写一份 .tsl 代码：
请做一个“把额度增加 5”的动作，名字由你自己取。
脚本里 quota 一开始是 10，调用后输出 quota。
```

### TSL-024: 默认手续费

```text
请写一份 .tsl 代码：
请做一个“计算手续费后金额”的功能，名字由你自己取。
如果没有传金额，就按 100 处理；最后结果是金额加 6。
请分别输出不传金额和传 20 时的结果。
```

### TSL-025: 下一批编号

```text
请写一份 .tsl 代码：
请做一个“取得下一批编号”的功能，名字由你自己取。
起始编号是整数，默认是 10，结果也是整数。
它要返回起始编号加 1。请输出默认情况下的结果。
```

### TSL-026: 区间组装

```text
请写一份 .tsl 代码：
请做一个“组装左右边界”的功能，名字由你自己取，把两个边界值组成一个两项列表。
调用时请用命名方式传入：right 是 90，left 是 40。
最后输出这两项。
```

### TSL-027: 跳过中间值

```text
请写一份 .tsl 代码：
请做一个“检查中间位置”的功能，名字由你自己取，里面要输出第二个位置 b 是不是 nil。
调用时只给第一个和第三个位置传值，故意跳过 b。
```

### TSL-028: 按名字调用功能

```text
请写一份 .tsl 代码：
请做一个“三位数字编码”的功能，名字由你自己取。
它把三个输入算成 a * 100 + b * 10 + c。
脚本里请通过 call 按这个名字调用它，并输出结果。
```

### TSL-029: 多个数字相乘

```text
请写一份 .tsl 代码：
请做一个“多个数字相乘”的功能，名字由你自己取。
它可以接收任意多个数字，并把它们全部相乘。
请用 2、3、4 调用，并输出结果。
```

### TSL-030: 看到多少输入

```text
请写一份 .tsl 代码：
请做一个“统计收到多少输入”的功能，名字由你自己取。
前两个位置是固定的，后面还能继续接收更多值。
它要输出 ParamCount * 100 + RealParamCount 的结果。
请用 5、6、7 调用。
```

### TSL-031: 保存一个小计算

```text
请写一份 .tsl 代码：
把一个“小计算”保存到你自己命名的变量里。这个小计算接收两个值，结果是两者相乘。
请通过 call 调用这个变量，并用 4 和 9 输出结果。
```

### TSL-032: 把计算交给别人执行

```text
请写一份 .tsl 代码：
请做一个“执行后再翻倍”的功能，名字由你自己取，它接收另一个计算。
这个功能要先用 3 调用收到的计算，再把得到的结果乘以 2。
调用它时，直接给它一个“把输入加 5”的匿名计算，并输出结果。
```

### TSL-033: 查找已有功能

```text
请写一份 .tsl 代码：
请做一个“把输入乘以 3”的功能，名字由你自己取。
脚本里找到这个名字对应的函数值，再用支持的函数值调用方式处理 7，并输出结果。
```

### TSL-034: 传递当前功能

```text
请写一份 .tsl 代码：
请做一个“把输入平方”的功能，名字由你自己取。
再做一个“调用传入计算”的功能，名字也由你自己取，它接收一个计算和一个值，并通过 call 执行。
脚本里取得平方功能的函数值，并输出调用结果。
```

### TSL-035: 函数里使用规则包

```text
请写一份 .tsl 代码：
请做一个“读取远程费率”的功能，名字由你自己取。
这个功能一进入函数体就要使用一个费率相关的 unit，然后返回该 unit 中读取费率动作的结果。
```

### TSL-036: 脚本开头使用规则包

```text
请写一份 .tsl 代码：
脚本需要先使用两个你自己命名的规则包：一个处理价格，一个处理税费。
之后调用一个“计算最终金额”的动作，并输出结果。
```

### TSL-037: 手续费扩展

```text
请写一份 .tsf 代码：
提供一个“计算服务费”的功能，名字由你自己取，接收金额。
金额大于 1000 时，费用是 amount div 20；否则费用是 30。
不要写可直接运行的脚本入口。
```

### TSL-038: 发票规则包

```text
请写一份 .tsf 代码：
请做一个“发票规则”unit，unit 名由你自己取。
外部只需要能调用一个“默认额度”功能，并得到 500。
请写成完整的 unit 文件。
```

### TSL-039: 运费规则包

```text
请写一份 .tsf 代码：
请做一个“运费规则”unit，unit 名由你自己取。
外部只能调用一个“计算可计费重量”的功能。
内部可以有一个不对外公开的小工具，用来把负数修正为 0。
可计费重量要返回修正后的毛重减去皮重。
```

### TSL-040: 会员积分规则包

```text
请写一份 .tsf 代码：
请做一个“会员积分规则”unit，unit 名由你自己取。
外部可以调用“基础分”和“最终积分”两个功能。
level 大于等于 3 时基础分是 20，否则是 5。
最终积分的结果是金额 div 10 加上基础分。
```

### TSL-041: 商品信息表

```text
请写一份 .tsl 代码：
准备一条商品信息，里面有 sku = "B17"，qty = 12。
请输出 sku 和 qty。
```

### TSL-042: 只取第一个成绩

```text
请写一份 .tsl 代码：
有一组成绩 88、99、100。
请只取第一个值放到 first_mark，然后输出 first_mark。
```

### TSL-043: 读取两行数据

```text
请写一份 .tsl 代码：
有两行数据：(8, 1) 和 (9, 2)。
请把两行分别取出来，再输出每行的两个值。
```

### TSL-044: 检查是否存在

```text
请写一份 .tsl 代码：
先检查 5 是否在 2、5、8 这一组数字里，并输出结果。
再检查整行 (2, 5) 是否在两行数据 (1, 1)、(2, 5) 里面，并输出结果。
```

### TSL-045: 两组行数据对比

```text
请写一份 .tsl 代码：
left_rows 是 (1, "a")、(2, "b")。
right_rows 是 (2, "b")、(3, "c")。
请分别算出合并、交集、左边独有、两边不重叠的结果，并输出每个结果的大小。
```

### TSL-046: 只保留允许状态

```text
请写一份 .tsl 代码：
有一批订单，每行包含订单号和状态。
再准备一份允许状态列表。
请只保留状态命中的订单，并输出保留下来的行数。
```

### TSL-047: 排除禁止状态

```text
请写一份 .tsl 代码：
有一批任务，每行包含任务号和状态。
再准备一份禁止状态列表。
请排除命中的任务，并输出剩余行数。
```

### TSL-048: 查询商品数量

```text
请写一份 .tsl 代码：
有一批商品数据，每行包含商品编号和数量。
请用 TS-SQL 只取数量大于 3 的行，并输出结果行数。
```

### TSL-049: 筛选并排序成绩

```text
请写一份 .tsl 代码：
有一批姓名和分数。
请用 TS-SQL 只保留分数大于等于 60 的人，并按分数从高到低排序。
最后输出第一行的姓名。
```

### TSL-050: 部门金额汇总

```text
请写一份 .tsl 代码：
有一批部门和金额数据。
请用 TS-SQL 按部门汇总金额，并输出汇总后的行数。
```

### TSL-051: 客户订单关联

```text
请写一份 .tsl 代码：
有一组客户数据和一组订单数据，它们通过客户编号关联。
请用 TS-SQL 得到客户名称和订单金额，并输出关联后的行数。
```

### TSL-052: 多种数字写法

```text
请写一份 .tsl 代码：
有几个配置值：0x2A、0b1010、0o12、200L、6E2。
请分别输出它们对应的类型判断结果。
```

### TSL-053: 日期和时间

```text
请写一份 .tsl 代码：
有一个日期 20240618T，还有一个带时间的值 20240618.1530T。
请分别输出日期字符串和时间字符串。
```

### TSL-054: 数字真假判断

```text
请写一份 .tsl 代码：
先输出 true 和 false。
再分别判断 4、0、-2 在 if 里会走哪个分支，并输出分支标记。
```

### TSL-055: Nil 参与计算

```text
请写一份 .tsl 代码：
请输出 ifNil(nil) 的结果。
再输出 nil + 5、5 + nil，并检查 nil + nil 是不是 nil。
```

### TSL-056: 复数信息

```text
请写一份 .tsl 代码：
准备两个复数：8 + 6j 和 complex(3, -4)。
请输出第一个复数的实部、虚部，并输出第二个值是不是复数。
```

### TSL-057: 批次报告

```text
请写一份 .tsl 代码：
一批货有 17 件，每箱装 5 件；优先级是 3；距离是 9，基准是 4；ratio_base 是 7。
请输出完整箱数、剩余件数、优先级的四次方、距离与基准的按位关系结果，
以及 ratio_base 与 3 的左除计算结果。
```

### TSL-058: 补货数量

```text
请写一份 .tsl 代码：
最低库存是 20，当前库存是 14。
如果库存不足，reorder_count 就是最低库存减当前库存；否则是 0。
请用条件表达式得到 reorder_count，并输出它。
```

### TSL-059: 候补分数

```text
请写一份 .tsl 代码：
primary_score 是 12，missing_score 是 0，候补值是 99。
请用省略真值的条件表达式分别得到两个最终分数，并输出。
```

### TSL-060: 发货判断

```text
请写一份 .tsl 代码：
paid 是 true，blocked 是 false，amount 是 120。
请用 and、or、not 判断是否允许发货，并输出结果。
```

### TSL-061: 权限掩码

```text
请写一份 .tsl 代码：
read_write 是 6，audit_exec 是 3。
请输出共同权限、合并权限、差异权限，以及 read_write 取反后的结果。
```

### TSL-062: 计数调整

```text
请写一份 .tsl 代码：
counter 一开始是 5。
先加 4，再自增一次，最后输出 counter。
```

### TSL-063: 安全读取订单金额

```text
请写一份 .tsl 代码：
maybe_order 是 nil。
请安全读取 maybe_order.total，并输出读取结果是不是 nil。
```

### TSL-064: 阈值范围

```text
请写一份 .tsl 代码：
请判断 3、8、20 是否满足从小到大的连续比较，并输出结果。
```

### TSL-065: 三组指标逐项比较

```text
请写一份 .tsl 代码：
有三组指标：2、4、6；3、5、7；4、6、8。
请逐项判断第一组是否小于第二组、第二组是否小于第三组，
并输出得到的三个结果。
```

### TSL-066: 发票号格式

```text
请写一份 .tsl 代码：
发票号是 "INV-2024-07"。
请判断它是不是以 "INV-" 开头，并且后面包含数字，然后输出结果。
```

### TSL-067: 带注释的小脚本

```text
请写一份 .tsl 代码：
请包含两种 TSL 支持的注释写法。
然后把 daily_total 设为 31，并输出它。
```

### TSL-068: 编译时模式选择

```text
请写一份 .tsl 代码：
如果定义了 FAST_MODE，就输出 "fast"；否则输出 "safe"。
请用条件编译完成。
```

### TSL-069: 临时上下文

```text
请写一份 .tsl 代码：
请使用运行时 with 单星块。
在临时上下文里设置一个字段，并在块内输出这个字段。
```

### TSL-070: 嵌套上下文

```text
请写一份 .tsl 代码：
请使用运行时 with 双星块。
在嵌套上下文里读取外层字段，并输出组合结果。
```

### TSL-071: 带超时的远程式调用

```text
请写一份 .tsl 代码：
准备一个“慢速评分”的功能，名字由你自己取，它返回 12。
请用网格调用方式调用它，并设置超时时间，然后输出得到的结果。
```

### TSL-072: 全局缓存

```text
请写一份 .tsl 代码：
把 "session_limit" 这个全局缓存设为 300。
再读取它并输出，同时输出这个缓存是否存在。
```

### TSL-073: 调试结果

```text
请写一份 .tsl 代码：
请做一个“检查金额”的功能，名字由你自己取。
如果输入小于 0，请用 debugReturn 返回调试值；否则返回原值。
请用 -1 调用它并输出结果。
```

### TSL-074: 简单计时

```text
请写一份 .tsl 代码：
请用内置计时开始和结束功能包住一个小循环，并输出计时结果。
```

### TSL-075: 兜底跳转

```text
请写一份 .tsl 代码：
flag 是 false。
如果 flag 为 false，就跳到 fallback 标签。
fallback 里输出 "fallback"。
```

### TSL-076: 账户卡片

```text
请写一份 .tsl 代码：
我需要一种“账户卡片”对象，类型名由你自己取。
它要有一个公开字段，用来保存持有人姓名，字段名也由你自己取。
脚本里创建一张卡，把持有人设为 "Lina"，然后输出这个字段。
```

### TSL-077: 仪表盒

```text
请写一份 .tsl 代码：
我需要一种“仪表盒”对象，类型名由你自己取。
创建它时传入初始读数，保存到 reading。
它有一个“前进一步”的动作，动作名由你自己取，每次让读数增加 2，并给出新的读数。
脚本里创建一个初始读数为 10 的对象，输出调用这个动作后的结果。
```

### TSL-078: 设备总数

```text
请写一份 .tsl 代码：
我需要一种“设备计数器”类型，类型名由你自己取，它有一个所有对象共享的 total_count。
脚本里把 total_count 设为 77，然后输出它。
```

### TSL-079: 汇率工具

```text
请写一份 .tsl 代码：
我需要一种“汇率计算”类型，类型名由你自己取，上面直接提供一个“倍率相乘”的功能。
它返回 a * b。
脚本里通过类型本身调用这个功能处理 4 和 5，并输出结果。
```

### TSL-080: 货架编码

```text
请写一份 .tsl 代码：
我需要一种“货架盒”对象，类型名由你自己取。
它内部有一个保存货架编码的字段，字段名由你自己取。
对外通过一个属性读写这个编码，属性名也由你自己取。
脚本里创建对象，把编码设为 "S-8"，然后通过属性输出编码。
```

### TSL-081: 客户显示名

```text
请写一份 .tsl 代码：
我需要一种“客户名称”对象，类型名由你自己取。
它内部有一个 string 类型字段，用来保存原始姓名，字段名由你自己取。
对外通过一个带类型的属性访问显示姓名，属性名也由你自己取。
脚本里设置并输出这个显示姓名属性。
```

### TSL-082: 两种渲染方式

```text
请写一份 .tsl 代码：
我需要一种“格式化工具”对象，类型名由你自己取。
它有两个同名动作，动作名由你自己取：一个接收一个值，一个接收两个值。
脚本里分别调用这两种动作，并输出结果。
```

### TSL-083: 自行车对象

```text
请写一份 .tsl 代码：
我需要一种“交通工具基础对象”，类型名由你自己取。
它有一个说明类别的动作，动作名由你自己取，结果是 "vehicle"。
再做一种“自行车对象”，类型名也由你自己取，继承前面的基础对象，
并增加一个说明轮子数量的动作，动作名由你自己取，结果是 2。
脚本里创建自行车对象，输出类别和轮子数量。
```

### TSL-084: 折扣价格标签

```text
请写一份 .tsl 代码：
我需要一种“价格基础对象”，类型名由你自己取。
它有一个可被子类型改写的标签动作，动作名由你自己取，默认结果是 "base"。
再做一种“折扣价格对象”，类型名也由你自己取，把这个标签动作的结果改成 "discount"。
脚本里创建折扣价格对象并输出标签。
```

### TSL-085: 追加消息

```text
请写一份 .tsl 代码：
我需要一种“基础消息对象”，类型名由你自己取。
它有一个给出文字的动作，动作名由你自己取，结果是 "base"。
再做一种“提醒消息对象”，类型名也由你自己取。
它的文字动作要先调用父级同名动作，再追加 "-alert"。
脚本里输出提醒消息对象的文字。
```

### TSL-086: 类外补充方法

```text
请写一份 .tsl 代码：
我需要一种“票据打印器”，类型名由你自己取。
类型里面只先写出一个“打印编号”动作的名字，动作名由你自己取。
请在类型外面补上这个动作的内容，让它给出 "T-100"。
脚本里创建对象并输出结果。
```

### TSL-087: 按名称创建对象

```text
请写一份 .tsl 代码：
我需要一种“动态盒子”对象，类型名由你自己取。
它有一个给出数值的动作，动作名由你自己取，结果是 64。
脚本里请通过字符串里的类型名创建这个对象，并输出这个数值。
```

### TSL-088: 临时句柄清理

```text
请写一份 .tsl 代码：
我需要一种“临时句柄”对象，类型名由你自己取。
它被销毁时要输出 "released"。
脚本里创建它，然后把引用设为 nil。
```

### TSL-089: 外部评分函数

```text
请写一份 .tsl 代码：
有一个外部提供的“评分”功能，TSL 中使用的名字由你自己取，它接收一个值并给出结果。
这里只需要写出它和外部功能的连接写法，不需要调用。
```

### TSL-090: 外部日志动作

```text
请写一份 .tsl 代码：
有一个外部提供的“写日志”动作，TSL 中使用的名字由你自己取，它接收一段文本。
这里只需要写出它和外部动作的连接写法，不需要调用。
```

### TSL-091: 包装原生函数指针

```text
请写一份 .tsl 代码：
假设 native_ptr 已经保存了一个原生函数指针。
请按 TSL 支持的方式把它包装成可调用对象，并演示传入两个数字调用。
```

### TSL-092: 后台任务

```text
请写一份 .tsl 代码：
准备一个后台任务，名字由你自己取，里面输出 "work"。
请用线程相关写法启动它，并保持代码尽量小。
```

### TSL-093: FMArray 尺寸

```text
请写一份 .tsl 代码：
创建一个 2 行 3 列的 FMArray。
请输出它是不是 FMArray，并输出行数、列数和总尺寸。
```

### TSL-094: 矩阵大小

```text
请写一份 .tsl 代码：
准备一个两行三列的数字矩阵。
请输出它的行数、列数和总尺寸。
```

### TSL-095: 金额对象相加

```text
请写一份 .tsl 代码：
我需要一种“金额盒子”对象，类型名由你自己取，里面有 value。
请让两个这种对象可以直接相加，相加后得到新的同类对象。
脚本里创建两个对象，并输出相加后的 value。
```

### TSL-096: 区分局部和全局功能

```text
请写一份 .tsl 代码：
写一个局部功能，名字故意和某个系统功能一样。
脚本里请分别调用局部功能和全局/系统功能，并输出两次结果。
```

### TSL-097: 关闭默认写回

```text
请写一份 .tsl 代码：
关闭默认的输入写回行为。
请做一个“双值触碰”动作，名字由你自己取：普通输入不要写回，明确标记为 var 的输入要写回。
脚本调用后输出两个变量，证明只有 var 那个改变了。
```

### TSL-098: In 和 Out

```text
请写一份 .tsl 代码：
关闭默认的输入写回行为。
请做一个“同步几个值”的动作，名字由你自己取，接收三个值，并只让 out 标记的值写回。
脚本调用时使用 in 和 out 前缀，然后输出三个变量。
```

### TSL-099: 提前退出

```text
请写一份 .tsl 代码：
请做一个“保护性计算”的功能，名字由你自己取。
如果输入小于 0，就直接退出；否则给出输入乘以 2 的结果。
脚本里分别用 -1 和 6 调用它，并输出两次结果。
```

### TSL-100: 订单汇总

```text
请写一份 .tsl 代码：
有一批订单行，每行包含商品名、数量、单价。
请做一个“计算单行金额”的功能，名字由你自己取。
遍历所有订单行，数量为 0 的行跳过，其他行累计金额。
如果总金额大于 100，输出 "bulk"，否则输出 "normal"。
最后输出总金额。
```
