Что делает lua_rotate?

Lua5.3 представил новый c api lua_rotate : https://www.lua.org/manual/5.3/manual.html

Поворачивает элементы стека между действительным индексом idx и вершиной стека. Элементы поворачиваются на n позиций в направлении вершины для положительного n или на позиции -n в направлении дна для отрицательного значения n. Абсолютное значение n не должно превышать размер вращаемого среза.

не могу понять, как работает lua_rotate, особенно над жирными словами, нужна помощь!

1 ответ

Решение

Стек представляет собой массив, линейную последовательность элементов в четко определенном порядке. Итак, допустим, у нас есть массив символов следующим образом (индексы на основе 1 находятся над элементами):

1 2 3 4 5 6 
A Q Z G N K

"Вращение" - это обычная операция над последовательностями элементов в компьютерной науке, во многом похожая на "сдвиг", "сортировку" и т. Д. (Вот почему руководство Lua не удосуживается подробно рассказать о том, что означает "вращать"). элементы). Чтобы повернуть этот массив влево или вправо на некоторое число N означает сдвинуть все элементы влево / вправо на N элементы, и поместить элементы, сдвинутые от конца массива во вновь пустую часть, в их последовательном порядке.

Поэтому, если мы выполним правый поворот указанного выше массива на 2, вы получите следующее:

1 2 3 4 5 6
N K A Q Z G

Элементы 1-4 в оригинале стали элементами 3-6, а элементы 5-6 в оригинале стали 1-2 в новой версии. Вращение влево работает аналогично.

Поворот части массива просто означает выполнение этой операции, но оставляя другие части массива в покое. Поэтому, если вы возьмете исходный вышеупомянутый массив и сделаете левый поворот на 3 элемента, но затронув только элементы 3-6, вы получите следующее:

1 2 3 4 5 6
A Q K Z G N
Другие вопросы по тегам