REBOL 3/Серии REBOL 3
Прохождение
правитьКогда серия - упорядоченное множество значений, вы можете пройти одну ее позицию за другой. Для примера можно взять блок из трех простых элементов.
colors: [red green blue]
Первая позиция в блоке называется головой. Эту позицию занимает первое слово. Последняя позиция блока называется хвостом. Эта позиция следует сразу за последним словом в блоке. Хвост - только путь к концу блока. Если ввести слово переменную как имя блока, то переменная будет ссылкой на блок. Это текущее место для головы блока.
print head? colors true
Переменная есть первый индекс позиция блока.
print index? colors 1
Наш блок имеет длину равную 3.
print length? colors 3
Мы можем получить или вывести первый или второй элементы блока.
print first colors red print second colors green
Мы можем репозиционировать переменную в блоке используя различные функции, например, сдвинуть на одну позицию.
colors: next colors
Тогда, например, переменная имени блока уже не будет в голове, но займет место первого элемента в блоке, а второй станет первым.
print head? colors false
Однако длина блока уменьшиться на один и станет 2, где будет теперь последний третий элемент.
print index? colors 2 print first colors green
Повторив сдвиг еще раз, то кроме переменной имени и последней переменной в блоке у вас ничего не останется. Причем имя блока еще не будет хвостом, хотя оно уже на последнем месте.
print length? Colors 2 print second colors blue colors: next colors
Для того, чтобы достичь хвоста переменную имени надо сдвинуть еще раз.
print index? colors 3 print first colors blue print length? colors 1 print tail? colors false colors: next colors
Тогда длина блока будет 0, но индекс позиции имени 4.
print tail? colors true print index? colors 4 print length? Colors 0 print first colors ** Script Error: Out of range or past end. ** Where: print first colors
Причем элементов в блоке не останется и если мы захотим узнать первый элемент блока, то получим ошибку, выход за пределы конца блока. Также возможно передвигаться и в обратную сторону.
colors: back color sprint index? colors 3 print first colors blue