Вы используете оба уровня: ⍋
и ⍒
в качестве монадических примитивов.
По определению зачет возвращает целочисленный массив индексов, которые определяют отсортированный порядок выражения после него в порядке по возрастанию . Если какие-либо элементы равны (в вашем примере это две буквы l), они появятся в результате в том же порядке, в котором они были во входном выражении.
Итак, ⍋'Hello'
возвращает 1 2 3 4 5
. Два символа l расположены в одинаковом порядке, т. Е. Третий символ (1-я буква l) предшествует 4-му символу (2-я буква l).
По определению понижение также возвращает целочисленный массив индексов, которые определяют отсортированный порядок выражения, следующего за ним, в порядке по убыванию . Если какие-либо элементы равны (в вашем примере это две буквы l), они также появятся в результате в том же порядке, в котором они были в выражении.
Итак, ⍒'Hello'
возвращает 5 3 4 2 1
. Два л остаются в том же порядке, потому что они равны.
Когда вы применяете rotate ⌽
, целочисленный массив меняется на 1 2 4 3 5
, как вы видели.
Результат, который вы видите, - это именно то, что ожидается, учитывая то, как определены функции и как они работают с равными значениями.
Если вы хотите увидеть более экстремальный пример, сравните выходные данные для следующих двух массивов. Создайте массив из 10 элементов, каждый из которых имеет одинаковое значение 1. 10⍴1
, затем попробуйте функцию повышения, а затем попробуйте функцию снижения:
⍋10⍴1
и
⍒10⍴1
Они оба дадут один и тот же результат:
1 2 3 4 5 6 7 8 9 10