redscript-mc 3.0.1 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/.github/workflows/ci.yml +1 -0
  2. package/README.md +119 -313
  3. package/README.zh.md +118 -314
  4. package/ROADMAP.md +5 -5
  5. package/dist/data/impl_test/function/counter/get.mcfunction +5 -0
  6. package/dist/data/impl_test/function/counter/inc.mcfunction +7 -0
  7. package/dist/data/impl_test/function/counter/new.mcfunction +4 -0
  8. package/dist/data/impl_test/function/load.mcfunction +1 -0
  9. package/dist/data/impl_test/function/test_impl.mcfunction +10 -0
  10. package/dist/data/minecraft/tags/function/load.json +5 -0
  11. package/dist/data/playground/function/load.mcfunction +1 -0
  12. package/dist/data/playground/function/start.mcfunction +4 -0
  13. package/dist/data/playground/function/start__say_macro_t1.mcfunction +1 -0
  14. package/dist/data/playground/function/stop.mcfunction +5 -0
  15. package/dist/data/playground/function/stop__say_macro_t0.mcfunction +1 -0
  16. package/dist/data/stdlib_queue8_test/function/__queue_append_apply.mcfunction +4 -0
  17. package/dist/data/stdlib_queue8_test/function/__queue_peek_apply.mcfunction +4 -0
  18. package/dist/data/stdlib_queue8_test/function/__queue_size_raw_apply.mcfunction +4 -0
  19. package/dist/data/stdlib_queue8_test/function/load.mcfunction +1 -0
  20. package/dist/data/stdlib_queue8_test/function/queue_clear.mcfunction +6 -0
  21. package/dist/data/stdlib_queue8_test/function/queue_empty__merge_1.mcfunction +5 -0
  22. package/dist/data/stdlib_queue8_test/function/queue_empty__then_0.mcfunction +5 -0
  23. package/dist/data/stdlib_queue8_test/function/queue_peek__merge_1.mcfunction +13 -0
  24. package/dist/data/stdlib_queue8_test/function/queue_peek__then_0.mcfunction +5 -0
  25. package/dist/data/stdlib_queue8_test/function/queue_pop__merge_1.mcfunction +15 -0
  26. package/dist/data/stdlib_queue8_test/function/queue_pop__then_0.mcfunction +5 -0
  27. package/dist/data/stdlib_queue8_test/function/queue_push__const_11.mcfunction +6 -0
  28. package/dist/data/stdlib_queue8_test/function/queue_push__const_22.mcfunction +6 -0
  29. package/dist/data/stdlib_queue8_test/function/queue_size.mcfunction +13 -0
  30. package/dist/data/stdlib_queue8_test/function/test_queue_push_and_size.mcfunction +13 -0
  31. package/dist/data/test/function/load.mcfunction +1 -0
  32. package/dist/data/test/function/say_at.mcfunction +6 -0
  33. package/dist/data/test/function/test.mcfunction +4 -0
  34. package/dist/pack.mcmeta +6 -0
  35. package/dist/package.json +1 -1
  36. package/dist/src/__tests__/formatter-extra.test.d.ts +7 -0
  37. package/dist/src/__tests__/formatter-extra.test.js +123 -0
  38. package/dist/src/__tests__/global-vars.test.d.ts +13 -0
  39. package/dist/src/__tests__/global-vars.test.js +156 -0
  40. package/dist/src/__tests__/lint/new-rules.test.d.ts +9 -0
  41. package/dist/src/__tests__/lint/new-rules.test.js +402 -0
  42. package/dist/src/__tests__/lsp-rename.test.d.ts +8 -0
  43. package/dist/src/__tests__/lsp-rename.test.js +157 -0
  44. package/dist/src/__tests__/mc-integration/say-fstring.test.d.ts +11 -0
  45. package/dist/src/__tests__/mc-integration/say-fstring.test.js +220 -0
  46. package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +1 -1
  47. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1 -1
  48. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1 -1
  49. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1 -1
  50. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +1 -1
  51. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +1 -1
  52. package/dist/src/__tests__/mc-integration/stdlib-coverage-8.test.js +1 -1
  53. package/dist/src/__tests__/mc-syntax.test.js +4 -1
  54. package/dist/src/__tests__/monomorphize-coverage.test.d.ts +9 -0
  55. package/dist/src/__tests__/monomorphize-coverage.test.js +204 -0
  56. package/dist/src/__tests__/optimizer-cse.test.d.ts +7 -0
  57. package/dist/src/__tests__/optimizer-cse.test.js +226 -0
  58. package/dist/src/__tests__/parser.test.js +4 -13
  59. package/dist/src/__tests__/repl-server-extra.test.js +6 -7
  60. package/dist/src/__tests__/repl-server.test.js +5 -7
  61. package/dist/src/__tests__/stdlib/queue.test.js +6 -6
  62. package/dist/src/cli.js +0 -0
  63. package/dist/src/lexer/index.js +2 -1
  64. package/dist/src/lint/index.d.ts +12 -5
  65. package/dist/src/lint/index.js +730 -5
  66. package/dist/src/lsp/main.js +0 -0
  67. package/dist/src/mc-test/client.d.ts +21 -0
  68. package/dist/src/mc-test/client.js +34 -0
  69. package/dist/src/mir/lower.js +108 -6
  70. package/dist/src/optimizer/interprocedural.js +37 -2
  71. package/dist/src/parser/decl-parser.d.ts +19 -0
  72. package/dist/src/parser/decl-parser.js +323 -0
  73. package/dist/src/parser/expr-parser.d.ts +46 -0
  74. package/dist/src/parser/expr-parser.js +759 -0
  75. package/dist/src/parser/index.d.ts +8 -129
  76. package/dist/src/parser/index.js +13 -2262
  77. package/dist/src/parser/stmt-parser.d.ts +28 -0
  78. package/dist/src/parser/stmt-parser.js +577 -0
  79. package/dist/src/parser/type-parser.d.ts +20 -0
  80. package/dist/src/parser/type-parser.js +257 -0
  81. package/dist/src/parser/utils.d.ts +34 -0
  82. package/dist/src/parser/utils.js +141 -0
  83. package/docs/dev/README-mc-integration-tests.md +141 -0
  84. package/docs/lint-rules.md +162 -0
  85. package/docs/stdlib/bigint.md +2 -0
  86. package/editors/vscode/README.md +63 -41
  87. package/editors/vscode/out/extension.js +1881 -1776
  88. package/editors/vscode/out/lsp-server.js +4257 -3651
  89. package/editors/vscode/package-lock.json +3 -3
  90. package/editors/vscode/package.json +1 -1
  91. package/examples/loops-demo.mcrs +87 -0
  92. package/package.json +1 -1
  93. package/redscript-docs/docs/en/stdlib/advanced.md +629 -0
  94. package/redscript-docs/docs/en/stdlib/bigint.md +316 -0
  95. package/redscript-docs/docs/en/stdlib/bits.md +292 -0
  96. package/redscript-docs/docs/en/stdlib/bossbar.md +177 -0
  97. package/redscript-docs/docs/en/stdlib/calculus.md +289 -0
  98. package/redscript-docs/docs/en/stdlib/color.md +353 -0
  99. package/redscript-docs/docs/en/stdlib/combat.md +88 -0
  100. package/redscript-docs/docs/en/stdlib/cooldown.md +82 -0
  101. package/redscript-docs/docs/en/stdlib/dialog.md +155 -0
  102. package/redscript-docs/docs/en/stdlib/easing.md +558 -0
  103. package/redscript-docs/docs/en/stdlib/ecs.md +475 -0
  104. package/redscript-docs/docs/en/stdlib/effects.md +324 -0
  105. package/redscript-docs/docs/en/stdlib/events.md +3 -0
  106. package/redscript-docs/docs/en/stdlib/expr.md +45 -0
  107. package/redscript-docs/docs/en/stdlib/fft.md +141 -0
  108. package/redscript-docs/docs/en/stdlib/geometry.md +430 -0
  109. package/redscript-docs/docs/en/stdlib/graph.md +259 -0
  110. package/redscript-docs/docs/en/stdlib/heap.md +185 -0
  111. package/redscript-docs/docs/en/stdlib/interactions.md +179 -0
  112. package/redscript-docs/docs/en/stdlib/inventory.md +97 -0
  113. package/redscript-docs/docs/en/stdlib/linalg.md +557 -0
  114. package/redscript-docs/docs/en/stdlib/list.md +559 -0
  115. package/redscript-docs/docs/en/stdlib/map.md +140 -0
  116. package/redscript-docs/docs/en/stdlib/math.md +193 -0
  117. package/redscript-docs/docs/en/stdlib/math_hp.md +149 -0
  118. package/redscript-docs/docs/en/stdlib/matrix.md +403 -0
  119. package/redscript-docs/docs/en/stdlib/mobs.md +965 -0
  120. package/redscript-docs/docs/en/stdlib/noise.md +244 -0
  121. package/redscript-docs/docs/en/stdlib/ode.md +253 -0
  122. package/redscript-docs/docs/en/stdlib/parabola.md +342 -0
  123. package/redscript-docs/docs/en/stdlib/particles.md +311 -0
  124. package/redscript-docs/docs/en/stdlib/pathfind.md +255 -0
  125. package/redscript-docs/docs/en/stdlib/physics.md +493 -0
  126. package/redscript-docs/docs/en/stdlib/player.md +78 -0
  127. package/redscript-docs/docs/en/stdlib/quaternion.md +673 -0
  128. package/redscript-docs/docs/en/stdlib/queue.md +134 -0
  129. package/redscript-docs/docs/en/stdlib/random.md +223 -0
  130. package/redscript-docs/docs/en/stdlib/result.md +143 -0
  131. package/redscript-docs/docs/en/stdlib/scheduler.md +183 -0
  132. package/redscript-docs/docs/en/stdlib/set_int.md +190 -0
  133. package/redscript-docs/docs/en/stdlib/sets.md +101 -0
  134. package/redscript-docs/docs/en/stdlib/signal.md +400 -0
  135. package/redscript-docs/docs/en/stdlib/sort.md +104 -0
  136. package/redscript-docs/docs/en/stdlib/spawn.md +147 -0
  137. package/redscript-docs/docs/en/stdlib/state.md +142 -0
  138. package/redscript-docs/docs/en/stdlib/strings.md +154 -0
  139. package/redscript-docs/docs/en/stdlib/tags.md +3451 -0
  140. package/redscript-docs/docs/en/stdlib/teams.md +153 -0
  141. package/redscript-docs/docs/en/stdlib/timer.md +246 -0
  142. package/redscript-docs/docs/en/stdlib/vec.md +158 -0
  143. package/redscript-docs/docs/en/stdlib/world.md +298 -0
  144. package/redscript-docs/docs/zh/stdlib/advanced.md +615 -0
  145. package/redscript-docs/docs/zh/stdlib/bigint.md +316 -0
  146. package/redscript-docs/docs/zh/stdlib/bits.md +292 -0
  147. package/redscript-docs/docs/zh/stdlib/bossbar.md +170 -0
  148. package/redscript-docs/docs/zh/stdlib/calculus.md +287 -0
  149. package/redscript-docs/docs/zh/stdlib/color.md +353 -0
  150. package/redscript-docs/docs/zh/stdlib/combat.md +88 -0
  151. package/redscript-docs/docs/zh/stdlib/cooldown.md +84 -0
  152. package/redscript-docs/docs/zh/stdlib/dialog.md +152 -0
  153. package/redscript-docs/docs/zh/stdlib/easing.md +558 -0
  154. package/redscript-docs/docs/zh/stdlib/ecs.md +472 -0
  155. package/redscript-docs/docs/zh/stdlib/effects.md +324 -0
  156. package/redscript-docs/docs/zh/stdlib/events.md +3 -0
  157. package/redscript-docs/docs/zh/stdlib/expr.md +37 -0
  158. package/redscript-docs/docs/zh/stdlib/fft.md +128 -0
  159. package/redscript-docs/docs/zh/stdlib/geometry.md +430 -0
  160. package/redscript-docs/docs/zh/stdlib/graph.md +259 -0
  161. package/redscript-docs/docs/zh/stdlib/heap.md +185 -0
  162. package/redscript-docs/docs/zh/stdlib/interactions.md +160 -0
  163. package/redscript-docs/docs/zh/stdlib/inventory.md +94 -0
  164. package/redscript-docs/docs/zh/stdlib/linalg.md +543 -0
  165. package/redscript-docs/docs/zh/stdlib/list.md +561 -0
  166. package/redscript-docs/docs/zh/stdlib/map.md +132 -0
  167. package/redscript-docs/docs/zh/stdlib/math.md +193 -0
  168. package/redscript-docs/docs/zh/stdlib/math_hp.md +143 -0
  169. package/redscript-docs/docs/zh/stdlib/matrix.md +396 -0
  170. package/redscript-docs/docs/zh/stdlib/mobs.md +965 -0
  171. package/redscript-docs/docs/zh/stdlib/noise.md +244 -0
  172. package/redscript-docs/docs/zh/stdlib/ode.md +243 -0
  173. package/redscript-docs/docs/zh/stdlib/parabola.md +337 -0
  174. package/redscript-docs/docs/zh/stdlib/particles.md +307 -0
  175. package/redscript-docs/docs/zh/stdlib/pathfind.md +255 -0
  176. package/redscript-docs/docs/zh/stdlib/physics.md +493 -0
  177. package/redscript-docs/docs/zh/stdlib/player.md +78 -0
  178. package/redscript-docs/docs/zh/stdlib/quaternion.md +669 -0
  179. package/redscript-docs/docs/zh/stdlib/queue.md +124 -0
  180. package/redscript-docs/docs/zh/stdlib/random.md +222 -0
  181. package/redscript-docs/docs/zh/stdlib/result.md +147 -0
  182. package/redscript-docs/docs/zh/stdlib/scheduler.md +173 -0
  183. package/redscript-docs/docs/zh/stdlib/set_int.md +180 -0
  184. package/redscript-docs/docs/zh/stdlib/sets.md +107 -0
  185. package/redscript-docs/docs/zh/stdlib/signal.md +373 -0
  186. package/redscript-docs/docs/zh/stdlib/sort.md +104 -0
  187. package/redscript-docs/docs/zh/stdlib/spawn.md +142 -0
  188. package/redscript-docs/docs/zh/stdlib/state.md +134 -0
  189. package/redscript-docs/docs/zh/stdlib/strings.md +107 -0
  190. package/redscript-docs/docs/zh/stdlib/tags.md +3451 -0
  191. package/redscript-docs/docs/zh/stdlib/teams.md +150 -0
  192. package/redscript-docs/docs/zh/stdlib/timer.md +254 -0
  193. package/redscript-docs/docs/zh/stdlib/vec.md +158 -0
  194. package/redscript-docs/docs/zh/stdlib/world.md +289 -0
  195. package/src/__tests__/formatter-extra.test.ts +139 -0
  196. package/src/__tests__/global-vars.test.ts +171 -0
  197. package/src/__tests__/lint/new-rules.test.ts +437 -0
  198. package/src/__tests__/lsp-rename.test.ts +171 -0
  199. package/src/__tests__/mc-integration/say-fstring.test.ts +211 -0
  200. package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +1 -1
  201. package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1 -1
  202. package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1 -1
  203. package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1 -1
  204. package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +1 -1
  205. package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +1 -1
  206. package/src/__tests__/mc-integration/stdlib-coverage-8.test.ts +1 -1
  207. package/src/__tests__/mc-syntax.test.ts +3 -0
  208. package/src/__tests__/monomorphize-coverage.test.ts +220 -0
  209. package/src/__tests__/optimizer-cse.test.ts +250 -0
  210. package/src/__tests__/parser.test.ts +4 -13
  211. package/src/__tests__/repl-server-extra.test.ts +6 -6
  212. package/src/__tests__/repl-server.test.ts +5 -6
  213. package/src/__tests__/stdlib/queue.test.ts +6 -6
  214. package/src/lexer/index.ts +2 -1
  215. package/src/lint/index.ts +713 -5
  216. package/src/mc-test/client.ts +40 -0
  217. package/src/mir/lower.ts +111 -2
  218. package/src/optimizer/interprocedural.ts +40 -2
  219. package/src/parser/decl-parser.ts +349 -0
  220. package/src/parser/expr-parser.ts +838 -0
  221. package/src/parser/index.ts +17 -2558
  222. package/src/parser/stmt-parser.ts +585 -0
  223. package/src/parser/type-parser.ts +276 -0
  224. package/src/parser/utils.ts +173 -0
  225. package/src/stdlib/queue.mcrs +19 -6
@@ -0,0 +1,180 @@
1
+ # Set_int
2
+
3
+ > 本文档由 `src/stdlib/set_int.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [set_add](#set-add)
8
+ - [set_has](#set-has)
9
+ - [set_remove](#set-remove)
10
+ - [set_size](#set-size)
11
+ - [set_clear](#set-clear)
12
+ - [set_union](#set-union)
13
+ - [set_intersect](#set-intersect)
14
+
15
+ ---
16
+
17
+ ## `set_add` <Badge type="info" text="v3.0.0" />
18
+
19
+ 向 storage rs:set_int.{set_name} 中插入一个整数;若已存在则不会重复添加
20
+
21
+ ```redscript
22
+ fn set_add(set_name: string, value: int)
23
+ ```
24
+
25
+ **参数**
26
+
27
+ | 参数 | 说明 |
28
+ |------|------|
29
+ | `set_name` | rs:set_int 下的集合名称 |
30
+ | `value` | 要插入的整数值 |
31
+
32
+ **示例**
33
+
34
+ ```redscript
35
+ set_add("Visited", 42)
36
+ ```
37
+
38
+ ---
39
+
40
+ ## `set_has` <Badge type="info" text="v3.0.0" />
41
+
42
+ 检查整数是否存在于 storage rs:set_int.{set_name} 中
43
+
44
+ ```redscript
45
+ fn set_has(set_name: string, value: int): int
46
+ ```
47
+
48
+ **参数**
49
+
50
+ | 参数 | 说明 |
51
+ |------|------|
52
+ | `set_name` | rs:set_int 下的集合名称 |
53
+ | `value` | 要检测的整数值 |
54
+
55
+ **返回:** 元素存在返回 1,否则返回 0
56
+
57
+ **示例**
58
+
59
+ ```redscript
60
+ if (set_has("Visited", 42) == 1) { }
61
+ ```
62
+
63
+ ---
64
+
65
+ ## `set_remove` <Badge type="info" text="v3.0.0" />
66
+
67
+ 从 storage rs:set_int.{set_name} 中删除一个整数
68
+
69
+ ```redscript
70
+ fn set_remove(set_name: string, value: int)
71
+ ```
72
+
73
+ **参数**
74
+
75
+ | 参数 | 说明 |
76
+ |------|------|
77
+ | `set_name` | rs:set_int 下的集合名称 |
78
+ | `value` | 要删除的整数值 |
79
+
80
+ **示例**
81
+
82
+ ```redscript
83
+ set_remove("Visited", 42)
84
+ ```
85
+
86
+ ---
87
+
88
+ ## `set_size` <Badge type="info" text="v3.0.0" />
89
+
90
+ 返回 storage rs:set_int.{set_name} 中当前元素数量
91
+
92
+ ```redscript
93
+ fn set_size(set_name: string): int
94
+ ```
95
+
96
+ **参数**
97
+
98
+ | 参数 | 说明 |
99
+ |------|------|
100
+ | `set_name` | rs:set_int 下的集合名称 |
101
+
102
+ **返回:** 集合中的整数个数;若集合不存在则返回 0
103
+
104
+ **示例**
105
+
106
+ ```redscript
107
+ let count: int = set_size("Visited")
108
+ ```
109
+
110
+ ---
111
+
112
+ ## `set_clear` <Badge type="info" text="v3.0.0" />
113
+
114
+ 将 storage rs:set_int.{set_name} 重置为空整数列表
115
+
116
+ ```redscript
117
+ fn set_clear(set_name: string)
118
+ ```
119
+
120
+ **参数**
121
+
122
+ | 参数 | 说明 |
123
+ |------|------|
124
+ | `set_name` | rs:set_int 下的集合名称 |
125
+
126
+ **示例**
127
+
128
+ ```redscript
129
+ set_clear("Visited")
130
+ ```
131
+
132
+ ---
133
+
134
+ ## `set_union` <Badge type="info" text="v3.0.0" />
135
+
136
+ 计算两个整数集合的并集,并将结果写入目标集合
137
+
138
+ ```redscript
139
+ fn set_union(a: string, b: string, result: string)
140
+ ```
141
+
142
+ **参数**
143
+
144
+ | 参数 | 说明 |
145
+ |------|------|
146
+ | `a` | 左侧输入集合名称 |
147
+ | `b` | 右侧输入集合名称 |
148
+ | `result` | 目标集合名称 |
149
+
150
+ **示例**
151
+
152
+ ```redscript
153
+ set_union("SeenA", "SeenB", "SeenAll")
154
+ ```
155
+
156
+ ---
157
+
158
+ ## `set_intersect` <Badge type="info" text="v3.0.0" />
159
+
160
+ 计算两个整数集合的交集,并将结果写入目标集合
161
+
162
+ ```redscript
163
+ fn set_intersect(a: string, b: string, result: string)
164
+ ```
165
+
166
+ **参数**
167
+
168
+ | 参数 | 说明 |
169
+ |------|------|
170
+ | `a` | 左侧输入集合名称 |
171
+ | `b` | 右侧输入集合名称 |
172
+ | `result` | 目标集合名称 |
173
+
174
+ **示例**
175
+
176
+ ```redscript
177
+ set_intersect("SeenA", "SeenB", "SeenBoth")
178
+ ```
179
+
180
+ ---
@@ -0,0 +1,107 @@
1
+ # Sets
2
+
3
+ > 本文档由 `src/stdlib/sets.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [set_new](#set-new)
8
+ - [set_add](#set-add)
9
+ - [set_contains](#set-contains)
10
+ - [set_remove](#set-remove)
11
+ - [set_clear](#set-clear)
12
+
13
+ ---
14
+
15
+ ## `set_new` <Badge type="info" text="v1.1.0" />
16
+
17
+ 创建一个新的空集合并返回唯一集合 ID(字符串句柄)。
18
+
19
+ ```redscript
20
+ fn set_new(): string
21
+ ```
22
+
23
+ **返回:** 集合 ID(字符串句柄)
24
+
25
+ **示例**
26
+
27
+ ```redscript
28
+ let s: string = set_new();
29
+ set_add(s, "apple");
30
+ ```
31
+
32
+ ---
33
+
34
+ ## `set_add` <Badge type="info" text="v1.1.0" />
35
+
36
+ 若值不存在则将其加入集合(已存在则无操作)。
37
+
38
+ ```redscript
39
+ fn set_add(set: string, value: string)
40
+ ```
41
+
42
+ **参数**
43
+
44
+ | 参数 | 说明 |
45
+ |------|------|
46
+ | `set` | set_new 返回的集合 ID |
47
+ | `value` | 要添加的值 |
48
+
49
+ **返回:** 无返回值
50
+
51
+ ---
52
+
53
+ ## `set_contains` <Badge type="info" text="v1.1.0" />
54
+
55
+ 检查集合中是否存在某个值。
56
+
57
+ ```redscript
58
+ fn set_contains(set: string, value: string): int
59
+ ```
60
+
61
+ **参数**
62
+
63
+ | 参数 | 说明 |
64
+ |------|------|
65
+ | `set` | 集合 ID |
66
+ | `value` | 要查找的值 |
67
+
68
+ **返回:** 存在返回 1,否则返回 0
69
+
70
+ ---
71
+
72
+ ## `set_remove` <Badge type="info" text="v1.1.0" />
73
+
74
+ 从集合中移除某个值(不存在则无操作)。
75
+
76
+ ```redscript
77
+ fn set_remove(set: string, value: string)
78
+ ```
79
+
80
+ **参数**
81
+
82
+ | 参数 | 说明 |
83
+ |------|------|
84
+ | `set` | 集合 ID |
85
+ | `value` | 要移除的值 |
86
+
87
+ **返回:** 无返回值
88
+
89
+ ---
90
+
91
+ ## `set_clear` <Badge type="info" text="v1.1.0" />
92
+
93
+ 清空集合中的所有值。
94
+
95
+ ```redscript
96
+ fn set_clear(set: string)
97
+ ```
98
+
99
+ **参数**
100
+
101
+ | 参数 | 说明 |
102
+ |------|------|
103
+ | `set` | 集合 ID |
104
+
105
+ **返回:** 无返回值
106
+
107
+ ---
@@ -0,0 +1,373 @@
1
+ # Signal
2
+
3
+ > 本文档由 `src/stdlib/signal.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [uniform_int](#uniform-int)
8
+ - [uniform_frac](#uniform-frac)
9
+ - [normal_approx12](#normal-approx12)
10
+ - [exp_dist_approx](#exp-dist-approx)
11
+ - [bernoulli](#bernoulli)
12
+ - [weighted2](#weighted2)
13
+ - [weighted3](#weighted3)
14
+ - [gamma_sample](#gamma-sample)
15
+ - [poisson_sample](#poisson-sample)
16
+ - [geometric_sample](#geometric-sample)
17
+ - [negative_binomial_sample](#negative-binomial-sample)
18
+ - [dft_real](#dft-real)
19
+ - [dft_imag](#dft-imag)
20
+ - [dft_magnitude](#dft-magnitude)
21
+
22
+ ---
23
+
24
+ ## `uniform_int` <Badge type="info" text="v2.0.0" />
25
+
26
+ 返回 [lo, hi] 内的均匀随机整数(使用 LCG 随机数生成器)
27
+
28
+ ```redscript
29
+ fn uniform_int(seed: int, lo: int, hi: int): int
30
+ ```
31
+
32
+ **参数**
33
+
34
+ | 参数 | 说明 |
35
+ |------|------|
36
+ | `seed` | 任意整数种子 |
37
+ | `lo` | 下界(含) |
38
+ | `hi` | 上界(含) |
39
+
40
+ **返回:** [lo, hi] 内的伪随机整数
41
+
42
+ **示例**
43
+
44
+ ```redscript
45
+ let dmg: int = uniform_int(seed, 5, 15)
46
+ ```
47
+
48
+ ---
49
+
50
+ ## `uniform_frac` <Badge type="info" text="v2.0.0" />
51
+
52
+ 返回 [0, 10000] 内的均匀随机分数(×10000 精度)
53
+
54
+ ```redscript
55
+ fn uniform_frac(seed: int): int
56
+ ```
57
+
58
+ **参数**
59
+
60
+ | 参数 | 说明 |
61
+ |------|------|
62
+ | `seed` | 任意整数种子 |
63
+
64
+ **返回:** [0, 10000] 内的伪随机整数
65
+
66
+ **示例**
67
+
68
+ ```redscript
69
+ let frac: int = uniform_frac(seed)
70
+ ```
71
+
72
+ ---
73
+
74
+ ## `normal_approx12` <Badge type="info" text="v2.0.0" />
75
+
76
+ 使用 Irwin-Hall 方法(12 个均匀采样之和)近似 N(0,1) 变量
77
+
78
+ ```redscript
79
+ fn normal_approx12(seed: int): int
80
+ ```
81
+
82
+ **参数**
83
+
84
+ | 参数 | 说明 |
85
+ |------|------|
86
+ | `seed` | 任意整数种子 |
87
+
88
+ **返回:** 近似 N(0,1) 采样值 ×10000,范围约 [-60000, 60000]
89
+
90
+ **示例**
91
+
92
+ ```redscript
93
+ let z: int = normal_approx12(seed)
94
+ ```
95
+
96
+ ---
97
+
98
+ ## `exp_dist_approx` <Badge type="info" text="v2.0.0" />
99
+
100
+ 从速率为 lambda_fx 的指数分布中采样(结果上限为 100000)
101
+
102
+ ```redscript
103
+ fn exp_dist_approx(seed: int, lambda_fx: int): int
104
+ ```
105
+
106
+ **参数**
107
+
108
+ | 参数 | 说明 |
109
+ |------|------|
110
+ | `seed` | 任意整数种子 |
111
+ | `lambda_fx` | 速率参数 ×10000(如 10000 = 速率 1.0) |
112
+
113
+ **返回:** 指数分布变量 ×10000,上限 100000
114
+
115
+ **示例**
116
+
117
+ ```redscript
118
+ let wait: int = exp_dist_approx(seed, 10000)
119
+ ```
120
+
121
+ ---
122
+
123
+ ## `bernoulli` <Badge type="info" text="v2.0.0" />
124
+
125
+ 以 p_fx/10000 的概率返回 1,否则返回 0
126
+
127
+ ```redscript
128
+ fn bernoulli(seed: int, p_fx: int): int
129
+ ```
130
+
131
+ **参数**
132
+
133
+ | 参数 | 说明 |
134
+ |------|------|
135
+ | `seed` | 任意整数种子 |
136
+ | `p_fx` | 概率 ×10000(如 5000 = 50%,1000 = 10%) |
137
+
138
+ **返回:** 以给定概率返回 1,否则返回 0
139
+
140
+ **示例**
141
+
142
+ ```redscript
143
+ if (bernoulli(seed, 3000) == 1) { /* 30% chance */ }
144
+ ```
145
+
146
+ ---
147
+
148
+ ## `weighted2` <Badge type="info" text="v2.0.0" />
149
+
150
+ 按权重 w0、w1 随机选择 0 或 1
151
+
152
+ ```redscript
153
+ fn weighted2(seed: int, w0: int, w1: int): int
154
+ ```
155
+
156
+ **参数**
157
+
158
+ | 参数 | 说明 |
159
+ |------|------|
160
+ | `seed` | 任意整数种子 |
161
+ | `w0` | 结果 0 的权重 |
162
+ | `w1` | 结果 1 的权重 |
163
+
164
+ **返回:** 按权重比例采样的 0 或 1
165
+
166
+ **示例**
167
+
168
+ ```redscript
169
+ let side: int = weighted2(seed, 3, 7)
170
+ ```
171
+
172
+ ---
173
+
174
+ ## `weighted3` <Badge type="info" text="v2.0.0" />
175
+
176
+ 按权重 w0、w1、w2 随机选择 0、1 或 2
177
+
178
+ ```redscript
179
+ fn weighted3(seed: int, w0: int, w1: int, w2: int): int
180
+ ```
181
+
182
+ **参数**
183
+
184
+ | 参数 | 说明 |
185
+ |------|------|
186
+ | `seed` | 任意整数种子 |
187
+ | `w0` | 结果 0 的权重 |
188
+ | `w1` | 结果 1 的权重 |
189
+ | `w2` | 结果 2 的权重 |
190
+
191
+ **返回:** 按权重比例采样的 0、1 或 2
192
+
193
+ **示例**
194
+
195
+ ```redscript
196
+ let tier: int = weighted3(seed, 50, 30, 20)
197
+ ```
198
+
199
+ ---
200
+
201
+ ## `gamma_sample` <Badge type="info" text="v2.0.0" />
202
+
203
+ 从 Gamma(k, θ) 分布中采样(支持整数 k = 1..5)
204
+
205
+ ```redscript
206
+ fn gamma_sample(shape_k: int, scale_theta: int, seed: int): int
207
+ ```
208
+
209
+ **参数**
210
+
211
+ | 参数 | 说明 |
212
+ |------|------|
213
+ | `shape_k` | 形状参数 k ×10000(如 20000 = k=2) |
214
+ | `scale_theta` | 尺度参数 θ ×10000(如 10000 = θ=1.0) |
215
+ | `seed` | 任意整数种子 |
216
+
217
+ **返回:** Gamma 分布变量 ×10000
218
+
219
+ **示例**
220
+
221
+ ```redscript
222
+ let g: int = gamma_sample(20000, 10000, seed)
223
+ ```
224
+
225
+ ---
226
+
227
+ ## `poisson_sample` <Badge type="info" text="v2.0.0" />
228
+
229
+ 使用 Knuth 算法从 Poisson(λ) 分布中采样(λ ≤ 20 时效果最佳)
230
+
231
+ ```redscript
232
+ fn poisson_sample(lambda: int, seed: int): int
233
+ ```
234
+
235
+ **参数**
236
+
237
+ | 参数 | 说明 |
238
+ |------|------|
239
+ | `lambda` | 速率参数 ×10000(如 30000 = λ=3.0) |
240
+ | `seed` | 任意整数种子 |
241
+
242
+ **返回:** Poisson 计数(普通整数,非 ×10000)
243
+
244
+ **示例**
245
+
246
+ ```redscript
247
+ let n: int = poisson_sample(30000, seed)
248
+ ```
249
+
250
+ ---
251
+
252
+ ## `geometric_sample` <Badge type="info" text="v2.0.0" />
253
+
254
+ 从几何分布 Geometric(p) 中采样(首次成功前失败次数)
255
+
256
+ ```redscript
257
+ fn geometric_sample(p_success: int, seed: int): int
258
+ ```
259
+
260
+ **参数**
261
+
262
+ | 参数 | 说明 |
263
+ |------|------|
264
+ | `p_success` | 成功概率 ×10000(如 5000 = p=0.5) |
265
+ | `seed` | 任意整数种子 |
266
+
267
+ **返回:** 非负整数失败次数
268
+
269
+ **示例**
270
+
271
+ ```redscript
272
+ let fails: int = geometric_sample(5000, seed)
273
+ ```
274
+
275
+ ---
276
+
277
+ ## `negative_binomial_sample` <Badge type="info" text="v2.0.0" />
278
+
279
+ 从负二项分布 NegBin(r, p) 中采样(r 次成功前的总失败次数)
280
+
281
+ ```redscript
282
+ fn negative_binomial_sample(r: int, p_success: int, seed: int): int
283
+ ```
284
+
285
+ **参数**
286
+
287
+ | 参数 | 说明 |
288
+ |------|------|
289
+ | `r` | 成功次数(普通整数,如 1, 2, 3) |
290
+ | `p_success` | 成功概率 ×10000 |
291
+ | `seed` | 任意整数种子 |
292
+
293
+ **返回:** 总失败次数
294
+
295
+ **示例**
296
+
297
+ ```redscript
298
+ let n: int = negative_binomial_sample(3, 5000, seed)
299
+ ```
300
+
301
+ ---
302
+
303
+ ## `dft_real` <Badge type="info" text="v2.0.0" />
304
+
305
+ 计算最多 8 个样本的实值信号第 k 个 DFT 频段实部
306
+
307
+ ```redscript
308
+ fn dft_real(s0: int, s1: int, s2: int, s3: int, s4: int, s5: int, s6: int, s7: int, n: int, k: int): int
309
+ ```
310
+
311
+ **参数**
312
+
313
+ | 参数 | 说明 |
314
+ |------|------|
315
+ | `s0` | 样本 0 ×10000 … s7: 样本 7 ×10000 |
316
+ | `n` | 样本数(1–8) |
317
+ | `k` | 频段索引(0 到 n−1) |
318
+
319
+ **返回:** DFT 第 k 频段实部,×10000
320
+
321
+ **示例**
322
+
323
+ ```redscript
324
+ let re0: int = dft_real(10000, 0, -10000, 0, 0, 0, 0, 0, 4, 0)
325
+ ```
326
+
327
+ ---
328
+
329
+ ## `dft_imag` <Badge type="info" text="v2.0.0" />
330
+
331
+ 计算最多 8 个样本的实值信号第 k 个 DFT 频段虚部
332
+
333
+ ```redscript
334
+ fn dft_imag(s0: int, s1: int, s2: int, s3: int, s4: int, s5: int, s6: int, s7: int, n: int, k: int): int
335
+ ```
336
+
337
+ **参数**
338
+
339
+ | 参数 | 说明 |
340
+ |------|------|
341
+ | `s0` | 样本 0 ×10000 … s7: 样本 7 ×10000 |
342
+ | `n` | 样本数(1–8) |
343
+ | `k` | 频段索引 |
344
+
345
+ **返回:** DFT 第 k 频段虚部,×10000(使用负正弦约定)
346
+
347
+ ---
348
+
349
+ ## `dft_magnitude` <Badge type="info" text="v2.0.0" />
350
+
351
+ 计算 DFT 第 k 频段的幅度 sqrt(re² + im²),×10000
352
+
353
+ ```redscript
354
+ fn dft_magnitude(s0: int, s1: int, s2: int, s3: int, s4: int, s5: int, s6: int, s7: int, n: int, k: int): int
355
+ ```
356
+
357
+ **参数**
358
+
359
+ | 参数 | 说明 |
360
+ |------|------|
361
+ | `s0` | 样本 0 ×10000 … s7: 样本 7 ×10000 |
362
+ | `n` | 样本数 |
363
+ | `k` | 频段索引 |
364
+
365
+ **返回:** 第 k 频段幅度,×10000
366
+
367
+ **示例**
368
+
369
+ ```redscript
370
+ let mag: int = dft_magnitude(10000, 0, -10000, 0, 0, 0, 0, 0, 4, 1)
371
+ ```
372
+
373
+ ---