位置上的元素。 复合数据的正值序号依次为 0,1,…,N-2,N-1。 复合数据的负值序号依次为 -
N,-N+1,…,-2,-1。 这里 N 是复合数据的元素个数。通过对应位置的正负值序号差为 N , 可以 推导出负值序号的正值序号位置。大于 N-1 或小于-N 的序号超出复合数据的序号范围。
1.用于 nth 的隐式索引
表达式中第一个元素为复合数据,后面为索引数值的隐式索引可用于代替 nth 函数 来获取列表中的 一个元素或字符串中的一个字符:
(setq lst '(a b c (d e) (f g)))
(lst 0) → a ; 等同于 (nth (lst 0))
(lst 3) → (d e)
(lst 3 1) → e ; 等同于 (nth (lst 3 1))
(lst -1) → (f g)
20
("TeaScript" 3) → "S"
序号也可以用列表的方式提供 :
(lst '(3 1)) → e
(setq vec (ref 'e lst)) → (3 1)
(lst vec) → e
注意的是,在 TeaScript UTF-8 版本中,字符串的隐式索引或使用 nth 函数来操作字符串是以字符
为单位,而不是以单个字节为单位的。
2.用于 rest 和 slice 的隐式拆分
表达式中第一个元素索引数值,后面为的复合数据值的隐式拆分可用于代替 rest 函数 来获取排除索引序号前面元素后剩余的元素组成的列表或字符串。
表达式中第一个元素索引数值,第二个元素为索引数值或指定长度, 后面为的复合数据值的隐式
拆分 可用于代替 slice 函数 来获取排除索引序号前面元素后指定长度的元素组成的列表或字符串。
(setq lst '(a b c d e f g)) ; 列表
(1 lst) → (b c d e f g)
(2 lst) → (c d e f g)
(2 3 lst) → (c d e)
(-3 2 lst) → (e f)
(2 -2 lst) → (c d e)
(setq str "abcdefg") ; 字符串
(1 str) → "bcdefg"
(2 str) → "cdefg"
(2 3 str) → "cde"
(-3 2 str) → "ef"
(2 -2 str) → "cde"
在 TeaScript UTF-8 版本中,对于 rest,first 和 last 函数操作字符串是以字符为单位,而不是
以单个字节为单位的。 但是对于 rest 和 slice 的隐式拆分,始终以单个字节为单位的,因此 可用
来二进制内容的缓冲区操作。 从 find 和 regex 正则表达式操作函数返回的偏移和长度 也是以单个
字节为单位的,因此结果可用于进一步用 slice 函数或隐式拆分的方式来处理。
3.用于按更改部分内容的隐式索引
将隐式索引作为参数代入 setq 函数,可以更改复合数据中的部分内容:
(setq lst '(a b c d (e f g))) ; 列表
(lst 1) → b
(setq (lst 1) 'z) → z
lst → (a z c d (e f g))
(setq (lst -1) '(E F G)) → (E F G)
lst → (a z c d (E F G))
(setq s "TeaScript") ; 字符串
(setq (s 0) "t") → "t"
s → "teaScript"
注意的是,隐式拆分不可用 setq 函数来更改, 对于同时需要替换多个元素只能用隐式索引来逐个替换。 对于字符串,一次只能替换一个字符或用多个字符替换原有的而一个字符。