元组、列表和 Null 原语
| 操作码 | Fift 语法 | 堆栈 | Gas | 描述 | 
|---|---|---|---|---|
| Please enter a search query | ||||
| No results found | ||||
TVM 指令内容列表
元组、列表和 Null 原语
| xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas | 
|---|---|---|---|---|
| 6D | NULLPUSHNULL |  - null | 推入类型为 Null 的唯一值。 | 18 | 
| 6E | ISNULL | x - ? | 检查 x是否为 Null,根据情况分别返回-1或0。 | 18 | 
| 6F0n | [n] TUPLE | x_1 ... x_n - t | 创建包含 n值x_1,...,x_n的新 Tuplet=(x_1, … ,x_n)。0 <= n <= 15 | 26+n | 
| 6F00 | NIL | - t | 推入长度为零的唯一 Tuple t=()。 | 26 | 
| 6F01 | SINGLE | x - t | 创建单例 t:=(x),即长度为一的 Tuple。 | 27 | 
| 6F02 | PAIRCONS | x y - t | 创建对 t:=(x,y)。 | 28 | 
| 6F03 | TRIPLE | x y z - t | 创建三元组 t:=(x,y,z)。 | 29 | 
| 6F1k | [k] INDEX | t - x | 返回 Tuple t的第k个元素。0 <= k <= 15。 | 26 | 
| 6F10 | FIRSTCAR | t - x | 返回 Tuple 的第一个元素。 | 26 | 
| 6F11 | SECONDCDR | t - y | 返回 Tuple 的第二个元素。 | 26 | 
| 6F12 | THIRD | t - z | 返回 Tuple 的第三个元素。 | 26 | 
| 6F2n | [n] UNTUPLE | t - x_1 ... x_n | 解包长度等于 0 <= n <= 15的 Tuplet=(x_1,...,x_n)。如果 t不是 Tuple 或\|t\| != n,则抛出类型检查异常。 | 26+n | 
| 6F21 | UNSINGLE | t - x | 解包单例 t=(x)。 | 27 | 
| 6F22 | UNPAIRUNCONS | t - x y | 解包对 t=(x,y)。 | 28 | 
| 6F23 | UNTRIPLE | t - x y z | 解包三元组 t=(x,y,z)。 | 29 | 
| 6F3k | [k] UNPACKFIRST | t - x_1 ... x_k | 解包 Tuple t的前0 <= k <= 15个元素。如果 \|t\|<k,抛出类型检查异常。 | 26+k | 
| 6F30 | CHKTUPLE | t - | 检查 t是否为 Tuple。如果不是,则抛出类型检查异常。 | 26 | 
| 6F4n | [n] EXPLODE | t - x_1 ... x_m m | 解包 Tuple t=(x_1,...,x_m)并返回其长度m,但仅当m <= n <= 15。否则抛出类型检查异常。 | 26+m | 
| 6F5k | [k] SETINDEX | t x - t' | 计算 Tuple t',它与t仅在位置t'_{k+1}上不同,该位置被设置为x。0 <= k <= 15如果 k >= \|t\|,则抛出范围检查异常。 | 26+\|t\| | 
| 6F50 | SETFIRST | t x - t' | 将 Tuple t的第一个组件设置为x并返回结果 Tuplet'。 | 26+\|t\| | 
| 6F51 | SETSECOND | t x - t' | 将 Tuple t的第二个组件设置为x并返回结果 Tuplet'。 | 26+\|t\| | 
| 6F52 | SETTHIRD | t x - t' | 将 Tuple t的第三个组件设置为x并返回结果 Tuplet'。 | 26+\|t\| | 
| 6F6k | [k] INDEXQ | t - x | 返回 Tuple t的第k个元素,其中0 <= k <= 15。换句话说,如果t=(x_1,...,x_n),则返回x_{k+1}。如果k>=n或t为 Null,则返回 Null 而不是x。 | 26 | 
| 6F60 | FIRSTQCARQ | t - x | 返回 Tuple 的第一个元素。 | 26 | 
| 6F61 | SECONDQCDRQ | t - y | 返回 Tuple 的第二个元素。 | 26 | 
| 6F62 | THIRDQ | t - z | 返回 Tuple 的第三个元素。 | 26 | 
| 6F7k | [k] SETINDEXQ | t x - t' | 在 Tuple t中设置第k个组件为x,其中0 <= k < 16,并返回结果 Tuplet'。如果 \|t\| <= k,首先通过将所有新组件设置为 Null 来将原始 Tuple 扩展到长度n’=k+1。如果原始值t为 Null,则将其视为空 Tuple。如果t既不是 Null 也不是 Tuple,抛出异常。如果x为 Null 且\|t\| <= k或t为 Null,则总是返回t'=t(并且不消耗元组创建 gas)。 | 26+\|t’\| | 
| 6F70 | SETFIRSTQ | t x - t' | 将 Tuple t的第一个组件设置为x并返回结果 元组t'。 | 26+\|t’\| | 
| 6F71 | SETSECONDQ | t x - t' | 将 Tuple t的第二个组件设置为x并返回结果 元组t'。 | 26+\|t’\| | 
| 6F72 | SETTHIRDQ | t x - t' | 将 Tuple组 t的第三个组件设置为x并返回结果 元组t'。 | 26+\|t’\| | 
| 6F80 | TUPLEVAR | x_1 ... x_n n - t | 以类似于 TUPLE的方式创建长度为n的新 Tuplet,但0 <= n <= 255从堆栈获取。 | 26+n | 
| 6F81 | INDEXVAR | t k - x | 类似于 k INDEX,但0 <= k <= 254从堆栈获取。 | 26 | 
| 6F82 | UNTUPLEVAR | t n - x_1 ... x_n | 类似于 n UNTUPLE,但0 <= n <= 255从堆栈获取。 | 26+n | 
| 6F83 | UNPACKFIRSTVAR | t n - x_1 ... x_n | 类似于 n UNPACKFIRST,但0 <= n <= 255从堆栈获取。 | 26+n | 
| 6F84 | EXPLODEVAR | t n - x_1 ... x_m m | 类似于 n EXPLODE,但0 <= n <= 255从堆栈获取。 | 26+m | 
| 6F85 | SETINDEXVAR | t x k - t' | 类似于 k SETINDEX,但0 <= k <= 254从堆栈获取。 | 26+\|t’\| | 
| 6F86 | INDEXVARQ | t k - x | 类似于 n INDEXQ,但0 <= k <= 254从堆栈获取。 | 26 | 
| 6F87 | SETINDEXVARQ | t x k - t' | 类似于 k SETINDEXQ,但0 <= k <= 254从堆栈获取。 | 26+\|t’\| | 
| 6F88 | TLEN | t - n | 返回 Tuple 的长度。 | 26 | 
| 6F89 | QTLEN | t - n or -1 | 类似于 TLEN,但如果t不是 Tuple,则返回-1。 | 26 | 
| 6F8A | ISTUPLE | t - ? | 根据 t是否为 Tuple,分别返回-1或0。 | 26 | 
| 6F8B | LAST | t - x | 返回非空 Tuple t的最后一个元素。 | 26 | 
| 6F8C | TPUSHCOMMA | t x - t' | 将值 x附加到 Tuplet=(x_1,...,x_n),但仅当结果 Tuplet'=(x_1,...,x_n,x)的长度最多为 255 时。否则抛出类型检查异常。 | 26+\|t’\| | 
| 6F8D | TPOP | t - t' x | 从非空 Tuple t=(x_1,...,x_n)分离最后一个元素x=x_n,并返回结果 Tuplet'=(x_1,...,x_{n-1})和原始的最后一个元素x。 | 26+\|t’\| | 
| 6FA0 | NULLSWAPIF | x - x or null x | 在顶部的 Integer x下推入一个 Null,但仅当x!=0时。 | 26 | 
| 6FA1 | NULLSWAPIFNOT | x - x or null x | 在顶部的 Integer x下推入一个 Null,但仅当x=0时。可用于在类似于PLDUXQ这样的静默原语后进行堆栈对齐。 | 26 | 
| 6FA2 | NULLROTRIF | x y - x y or null x y | 在顶部第二个堆栈条目下推入一个 Null,但仅当顶部的 Integer y非零时。 | 26 | 
| 6FA3 | NULLROTRIFNOT | x y - x y or null x y | 在顶部第二个堆栈条目下推入一个 Null,但仅当顶部的 Integer y为零时。可用于在类似于LDUXQ这样的静默原语后进行堆栈对齐。 | 26 | 
| 6FA4 | NULLSWAPIF2 | x - x or null null x | 在顶部的 Integer x下推入两个 Null,但仅当x!=0时。等同于 NULLSWAPIFNULLSWAPIF。 | 26 | 
| 6FA5 | NULLSWAPIFNOT2 | x - x or null null x | 在顶部的 Integer x下推入两个 Null,但仅当x=0时。等同于 NULLSWAPIFNOTNULLSWAPIFNOT。 | 26 | 
| 6FA6 | NULLROTRIF2 | x y - x y or null null x y | 在顶部第二个堆栈条目下推入两个 Null,但仅当顶部的 Integer y非零时。等同于 NULLROTRIFNULLROTRIF。 | 26 | 
| 6FA7 | NULLROTRIFNOT2 | x y - x y 或 null null x y | 仅当最顶部的 Integer y为零时,才在顶部第二个堆栈条目下推入两个 Null。等同于两次 NULLROTRIFNOT。 | 26 | 
| 6FBij | [i] [j] INDEX2 | t - x | 对于 0 <= i,j <= 3,恢复x=(t_{i+1})_{j+1}。等同于 [i] INDEX[j] INDEX。 | 26 | 
| 6FB4 | CADR | t - x | 恢复 x=(t_2)_1。 | 26 | 
| 6FB5 | CDDR | t - x | 恢复 x=(t_2)_2。 | 26 | 
| 6FE_ijk | [i] [j] [k] INDEX3 | t - x | 恢复 x=t_{i+1}_{j+1}_{k+1}。0 <= i,j,k <= 3等同于 [i] [j] INDEX2[k] INDEX。 | 26 | 
| 6FD4 | CADDR | t - x | 恢复 x=t_2_2_1。 | 26 | 
| 6FD5 | CDDDR | t - x | 恢复 x=t_2_2_2。 | 26 |