что делает lua_rotate? - PullRequest
       7

что делает lua_rotate?

0 голосов
/ 09 сентября 2018

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

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

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

1 Ответ

0 голосов
/ 09 сентября 2018

Стек - это в основном массив, линейная последовательность элементов в четко определенном порядке. Допустим, у нас есть массив символов следующим образом (индексы на основе 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
...