Как краткий обзор операторов. Индекс-оператора ⍳
возвращает позицию индекса в левом аргументе значений в правом аргументе. ascending cardinal numbers idiom⍋⍋
, который я хотел бы назвать «рангом», возвращает позицию, которую значение ввода будет занимать после сортировки. И, наконец, использование формы-оператора ⍴
в выражении (⍴Y)⍴A
возвращает первые значения A как вектор равной длины Y. Другими словами, он действует как подстрочная функция (по крайней мере, как она применяется здесь) ,
Пройдя через это, давайте рассмотрим, как формируются левые и правые аргументы конечного индекса-операции:
1 2 3 4 5 2 2 1 5 2 1 X⍳X,Y left
1 8 11 2 6 7 10 3 4 5 9 ⍋X⍳X,Y
1 4 8 9 10 5 6 2 11 7 3 ⍋⍋X⍳X,Y
5 2 1 1 2 3 4 5 2 2 1 X⍳Y,X right
3 4 11 2 5 9 10 6 7 1 8 ⍋X⍳Y,X
10 4 1 2 5 8 9 11 6 7 3 ⍋⍋X⍳Y,X
1 4 8 9 10 5 6 2 left (⍴X)⍴⍋⍋X⍳X,Y
10 4 1 right (⍴Y)⍴⍋⍋X⍳Y,X
5 2 1 result
Глядя на правый аргумент '10 4 1,»вы можете увидеть, чем ранг был присвоен значениям индекса букв «fod» в выражении «X⍳Y, X». Другими словами, после сортировки сортировки «f» будет находиться в позиции 10, «o» в 4 и «d» в позиции 1. Это можно увидеть более четко, применяя значения индекса к буквам после сортировки :
(Y,X)[⍋X⍳Y,X] ⍝ dddoooog ff
Это тот же самый результат, когда значения индекса левого аргумента применяются к конкатенации X с последующим Y:
(X,Y)[⍋X⍳X,Y] ⍝ dddoooog ff
несмотря на то, что они такие же, они являются результаты применения индексных значений к двум различным строкам: «корм для кормления» и «корм для собак». Применяя оператор повышения класса второй раз вместе с взятием подстроки, система отсчета возвращается d к исходным строкам, «собачьей еде» и «корму». Однако теперь у них есть общая точка зрения, поскольку левые и правые аргументы являются «рангами», относящимися к общей строке «dddoooog ff». Будучи рангами, как я обсуждал в другие post, они также относятся к исходным позициям. Поэтому, применяя конечный индекс-оператора, индекс ссылается не только на позицию левого аргумента, но и на позиции индекса в исходной строке, хранящейся в X, «корм для собак».
Общая форма многих из этих сортировочных идиом - индекс-ранг-индекс, где ранг действует как мост, связывая входные данные с выходом. Это возможно, поскольку в качестве набора пар ключ-значение элементы ранга-вектора одновременно могут ссылаться на две вещи.В примере 10 в правильном аргументе имеет ключевое значение 1, относящееся к значению индекса «f» в «fud». 10 в левом аргументе имеют значение ключа 5, относящееся к значению индекса «f» в «собачьей еде». В дополнение к этому значения равны 10, связывающие один ранг-вектор с другим. Следовательно, оба ключа и значения относятся к букве «f», но двумя разными способами.
Мораль этой истории заключается в том, чтобы попытаться спроектировать сортировочную идиому, место для начала может состоять в том, чтобы выяснить, как вектор ранга может сформировать мост между входом и выходом.