元组、列表和 Null 原语
操作码 | Fift 语法 | 堆栈 | Gas | 描述 |
---|---|---|---|---|
Please enter a search query | ||||
No results found |
TVM 指令内容列表
元组、列表和 Null 原语
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
6D | NULL PUSHNULL | - null | 推入类型为 Null 的唯一值。 | 18 |
6E | ISNULL | x - ? | 检查 x 是否为 Null,根据情况分别返回 -1 或 0 。 | 18 |
6F0n | [n] TUPLE | x_1 ... x_n - t | 创建包含 n 值 x_1 ,..., x_n 的新 Tuple t=(x_1, … ,x_n) 。0 <= n <= 15 | 26+n |
6F00 | NIL | - t | 推入长度为零的唯一 Tuple t=() 。 | 26 |
6F01 | SINGLE | x - t | 创建单例 t:=(x) ,即长度为一的 Tuple。 | 27 |
6F02 | PAIR CONS | 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 | FIRST CAR | t - x | 返回 Tuple 的第一个元素。 | 26 |
6F11 | SECOND CDR | t - y | 返回 Tuple 的第二个元素。 | 26 |
6F12 | THIRD | t - z | 返回 Tuple 的第三个元素。 | 26 |
6F2n | [n] UNTUPLE | t - x_1 ... x_n | 解包长度等于 0 <= n <= 15 的 Tuple t=(x_1,...,x_n) 。如果 t 不是 Tuple 或 \|t\| != n ,则抛出类型检查异常。 | 26+n |
6F21 | UNSINGLE | t - x | 解包单例 t=(x) 。 | 27 |
6F22 | UNPAIR UNCONS | 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 并返回结果 Tuple t' 。 | 26+\|t\| |
6F51 | SETSECOND | t x - t' | 将 Tuple t 的第二个组件设置为 x 并返回结果 Tuple t' 。 | 26+\|t\| |
6F52 | SETTHIRD | t x - t' | 将 Tuple t 的第三个组件设置为 x 并返回结果 Tuple t' 。 | 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 | FIRSTQ CARQ | t - x | 返回 Tuple 的第一个元素。 | 26 |
6F61 | SECONDQ CDRQ | t - y | 返回 Tuple 的第二个元素。 | 26 |
6F62 | THIRDQ | t - z | 返回 Tuple 的第三个元素。 | 26 |
6F7k | [k] SETINDEXQ | t x - t' | 在 Tuple t 中设置第 k 个组件为 x ,其中 0 <= k < 16 ,并返回结果 Tuple t' 。如果 \|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 的新 Tuple t ,但 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 | TPUSH COMMA | t x - t' | 将值 x 附加到 Tuple t=(x_1,...,x_n) ,但仅当结果 Tuple t'=(x_1,...,x_n,x) 的长度最多为 255 时。否则抛出类型检查异常。 | 26+\|t’\| |
6F8D | TPOP | t - t' x | 从非空 Tuple t=(x_1,...,x_n) 分离最后一个元素 x=x_n ,并返回结果 Tuple t'=(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 时。等同于 NULLSWAPIF NULLSWAPIF 。 | 26 |
6FA5 | NULLSWAPIFNOT2 | x - x or null null x | 在顶部的 Integer x 下推入两个 Null,但仅当 x=0 时。等同于 NULLSWAPIFNOT NULLSWAPIFNOT 。 | 26 |
6FA6 | NULLROTRIF2 | x y - x y or null null x y | 在顶部第二个堆栈条目下推入两个 Null,但仅当顶部的 Integer y 非零时。等同于 NULLROTRIF NULLROTRIF 。 | 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 |