Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Почему "uniq sort" и "sort uniq" дают разный результат? ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2014, 11:41 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Не верю! Ща проверю: Код: php 1. 2. Угу? Смотрим... http://search.cpan.org/~rehsack/List-MoreUtils-0.402/lib/List/MoreUtils.pm#uniq_LIST Ага! Значит в моем случае, оно возвращало двоечку, а sort на нее ругался, ибо не список. А вот что у тебя происходит? Ну на вскидку: какая у тебя версия MoreUtils? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2014, 06:08 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
А у него, походу, винда... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2014, 14:59 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
На Debian так же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2014, 16:03 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Alibek B., почувствуй разницу: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. и ты поймёшь, что самый лучший результат даёт Код: php 1. и Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 08:47 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Вопрос как-бы не в том, какой вариант дает лучший результат. Вопрос в том, почему результаты вообще отличаются? Код: php 1. 2. 3. 4. Почему sort uniq @array это не то же самое, что sort(uniq(@array))? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 09:42 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Воспроизводится на Debian и Windows. Версии Perl v5.14.2 (в обоих случаях). Версия List::MoreUtils 0.33, но я вообще не представляю, причем тут она — проблема ведь не с функцией uniq, а с тем, как результаты функций передаются по конвейеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 09:45 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Код: php 1. 2. 3. 4. То есть дело даже не в том, что парсер неправильно понял синтаксис и решил развернуть массив и добавить к нему uniq как аргумент (то есть парсер не интерпретирует выражение, как sort(uniq,'c','b','c')). Для меня вообще загадка, откуда во втором случае (sort union(@lst)) функция sort получила исходный массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 09:55 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Alibek B., во втором случае функция не получила исходный массив. a получила: sort subroutine didn't return single value at -e line 1 я для чего все те примеры, которые выше, приводил? сам же и отвечу: для того, чтобы пришло понимание, что парсер разбирает аргументы подпрограммы, которые через пробел без скобок таким образом, что предугадать невозможно(трудно); поэтому думать об этом не стоит, а стоит писать вызов со скобками, чтобы ВСЕМ было легче ( и слону и даже маленькой улитке ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 10:53 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Так я и другой пример ниже привел: Код: php 1. 2. Тут уже у парсера нет возможности что-то понять неправильно. И отсутствие ошибок при заданном strict это подтверждает. Однако функция sort возвращает три значения, хотя uniq(@lst) возвращает только два. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 11:13 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Alibek B., ты слушаешь только себя, тогда сам с собой и разговаривай. последняя 4-ая попытка: твой пример sort uniq(@lst) соответствует моему sort uniq() из того большого списка бесскобочных вызовов. я специально его подбирал, тратил своё время, чтоб ты посмотрел на диагностику, она показательна. как оказалось зря. ты мне надоел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 14:56 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
volodin661ты слушаешь только себя, Симметрично. Я проверил указанные выше варианты, они у меня не возвращают ошибки. И вопрос был не в том, почему при явном задании приоритетов с помощью скобок функции возвращают ожидаемые значения. А в том, почему с одним и тем же списком, но разным порядком функций, возвращаются разные результаты. Или, другими словами, почему "sort uniq(@lst)" возвращает три элемента? Он должен вернуть или два элемента (результат uniq), или один элемент (если uniq вернет скаляр, а не список), или ошибку (если uniq вернет скаляр, а sort работает только со списком). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 16:15 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Alibek B.Или, другими словами, почему "sort uniq(@lst)" возвращает три элемента? Он должен вернуть или два элемента (результат uniq), или один элемент (если uniq вернет скаляр, а не список), или ошибку (если uniq вернет скаляр, а sort работает только со списком).Потому что у тебя баг в List::MoreUtils. У меня "sort uniq(@lst)" выдает ожидаемую ошибку. И на Mint, и на Debian, и на Win/Strawberry. На AIX'овой версии проверить не смог, у меня там нету List::MoreUtils модуля... Сделай в командной строке: cpan. В его командной строке: i List::MoreUtils Смотри что у тебя в INST_VERSION. И кстати, этот модуль пару дней назад обновили. Хотя у меня и 0.33 работает замечательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 19:20 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Странно. MoreUtils мне кажется тут вообще не причем. uniq, как и положено, в списочном контексте возвращает список. Если парсер не может правильно обработать "sort uniq(@lst)", то он должен возвратить ошибку. Но раз ошибки у меня нет, значит парсер отработал правильно и аргументом для sort взял список. Но почему в этом списке 3 элемента, я понять не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 20:56 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
White OwlAlibek B.Или, другими словами, почему "sort uniq(@lst)" возвращает три элемента? Он должен вернуть или два элемента (результат uniq), или один элемент (если uniq вернет скаляр, а не список), или ошибку (если uniq вернет скаляр, а sort работает только со списком).Потому что у тебя баг в List::MoreUtils. У меня "sort uniq(@lst)" выдает ожидаемую ошибку. И на Mint, и на Debian, и на Win/Strawberry. На AIX'овой версии проверить не смог, у меня там нету List::MoreUtils модуля... Сделай в командной строке: cpan. В его командной строке: i List::MoreUtils Смотри что у тебя в INST_VERSION. И кстати, этот модуль пару дней назад обновили. Хотя у меня и 0.33 работает замечательно. не надо никаких конспирологических версий. Повторюсь в 5-й раз, списковые операторы Perl имеют очень коварные приоритеты разбора своих аргументов в тех случаях, когда скобки опущены; порядок захвата аргументов имеет приоритет от самого высшего( как у терма) до самого низшего в зависимости от того слева или справа они(аргументы) расположены относительно спискового оператора. uniq я уж как-нить и сам могу написать, безо всяких там Моря Утилсов. sub uniq (@) { $h{$_}=1 for @_; return keys %h } проверяем: Код: php 1. 0#1#2#3#4#5#6#7#8#9 теперь так: Код: php 1. 9#8#1#1#2#2#3#3#4#5#6#7#0 знакомая картина? теперь засовываем отладочный print унутрь. Код: php 1. ** ** ** 1#1#2 уже теплее? и для проверки догадки: Код: php 1. 1 то есть, uniq даже не вызывался. Итак: этот вызов Код: php 1. Pеrl трактует как Код: php 1. Поэтому, чтобы не думать print sort( uniq( 1,1,2) ); uniq( sort ( 1,1,2) ); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 06:14 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
и, наконец, ВОТ: Perl6 Код: php 1. 1 2 3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 06:58 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
volodin661Pеrl трактует как Код: php 1. Вот оно что. На это моей фантазии не хватило. Правда тогда непонятно, почему у меня вывод сортировался. Ведь uniq в скалярном контексте всегда будет возвращать положительное значение и сортировка не должна выполняться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 09:15 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Alibek B.volodin661Pеrl трактует как Код: php 1. Вот оно что. На это моей фантазии не хватило. Правда тогда непонятно, почему у меня вывод сортировался. Ведь uniq в скалярном контексте всегда будет возвращать положительное значение и сортировка не должна выполняться. Код: php 1. 1,2,3,4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 16:23 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Я имею ввиду, что для синтаксиса @sorted = sort {&function} @unsorded если сортировочная функция/выражение всегда возвращает положительное значение, значит при сортировке всегда предполагается, что $a>$b. То есть по сути сортировка не осуществляется, а элементы просто выводятся в обратном порядке. А у меня какая-то странность. Perl v5.14.2 (Debian и Windows): Код: php 1. 2. 3. 4. 5. Perl v5.16.1 (FreeBSD и Windows): Код: php 1. 2. 3. 4. 5. То есть sort {1} (1,2,3) действительно не сортирует. А вот sort uniq (1,2,3) в первой среде (в версии 5.14.2) сортировку осуществляет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 17:20 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Alibek B., там всё совсем неоднозначно с пользовательской сортировкой. подсовываемые константы разрушают алгоритм. Код: php 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2014, 02:15 |
|
||
|
Perl - непонятности с порядком выполнения
|
|||
|---|---|---|---|
|
#18+
Вообщем ничего не понял. Просто запомню, что так делать не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2014, 09:05 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38845676&tid=1462119]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 328ms |

| 0 / 0 |
