Оценка вверх / вниз APL - PullRequest
       18

Оценка вверх / вниз APL

1 голос
/ 08 февраля 2012

Как получается, что

⌽(⍒'Hello')

есть

1 2 4 3 5

когда

⍋'Hello'

есть

1 2 3 4 5

Я новичок в APL и случайно наткнулся на него. Мне просто интересно, почему второй л предшествует первому.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Вы используете оба уровня: и в качестве монадических примитивов.

По определению зачет возвращает целочисленный массив индексов, которые определяют отсортированный порядок выражения после него в порядке по возрастанию . Если какие-либо элементы равны (в вашем примере это две буквы 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
0 голосов
/ 10 октября 2016

Примитивы с повышением и понижением сохраняют порядок равных элементов.Как уже говорили другие, должно быть правило для равных аргументов.Но это правило имеет то преимущество, что допускает многоключевые сортировки.То есть, если у вас есть массив с несколькими связанными ключами, сортируя по каждому ключу от наименее значимого до наиболее значимого, вы получаете результат, отсортированный по наиболее значимому ключу, с равными по 2-му значимому, элементы равны 1-мудва отсортированы по 3-му и так далее.Чтобы это работало, индексный вектор должен быть захвачен и использован для обновления всех ключей и данных для их синхронизации.Или они могут храниться во вложенной структуре, и в этом случае они будут автоматически сохраняться в правильном относительном порядке.

...