Re[2]: range-v3 и модный C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 26.07.20 10:22
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Это не попытка "угодить всем", а вполне логичный шаг по стандартизации давно существующей и успешно применяемой практики Boost.Range

EP>Range'и как концепция отлично дополняют итераторы, и существуют в других языках типа D.

Надеюсь, то что попало в стандарт будет всё же более успешной практикой
Автор: ArtDenis
Дата: 23.07.20
Re[4]: range-v3 и модный C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 26.07.20 10:24
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>В этом нет ничего удивительного, учитывая поведение std::unique из ISO C++ прошлого века.

EP>Такой вариант вполне логичный и оправданный — во-первых это более общо, во-вторых позволяет не делать лишнюю работу. Например таким же образом работает uniq(1) (тоже из прошлого века).

Извини, я сориентироваться хочу. Ты принципиально не читаешь ответы в теме, а пишешь свой для начала?

http://rsdn.org/forum/cpp.applied/7785596.1
Автор: kaa.python
Дата: 26.07.20

http://rsdn.org/forum/cpp.applied/7785724.1
Автор: kaa.python
Дата: 26.07.20
Отредактировано 26.07.2020 10:33 kaa.python . Предыдущая версия .
Re[5]: range-v3 и модный C++
От: Evgeny.Panasyuk Россия  
Дата: 26.07.20 10:35
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>А почему реализация функционального концепта в языке программирования должна равняться на Юникс-утилиты


Ну она базируется на std::unique из C++1998. Но, даже если не знать про std::unique, а только про uniq — то существование такого интерфейса (отличного от distinct) должно натолкнуть на мысль таки заглянуть в документацию, и прочитать что именно делает используемая команда, а не строить догадки. В то что ты не знал ни про uniq, ни про std::unique — верится с трудом

KP>, а не, к примеру, на коммерческие функциональные языки?


Что ты называешь "коммерческими", какие преимущества аргументации эта "коммерческость" даёт по сравнению со стандартизированной uniq?

KP>(distinct [2 2 1 5 4 4 4 ])

KP>=> (2 1 5 4)

Это странный пример в обсуждаемом контексте, так как unique/uniq выдаст такой же результат

KP>Функциональные концепции в языке должны базироваться на подходах принятых в функциональных языках, по причинам, которые я вот тут объяснял
Автор: kaa.python
Дата: 26.07.20
.


Ну вот если бы стоял выбор между интерфейсами uniq и distinct для Range'ей, то я бы выбрал uniq.
Во-первых, это более общо — например нужно удалить именно последовательные дубликаты, а не все.
Во-вторых, быстрее если данные уже в нужном порядке.
Тем не менее, и у интерфейса distinct тоже есть преемущества, так что в идеале нужны оба.
Re[6]: range-v3 и модный C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 26.07.20 10:54
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Ну она базируется на std::unique из C++1998.


Это прекрасно, как сочетается std::unique и заявленная ленивость?

EP> Но, даже если не знать про std::unique, а только про uniq — то существование такого интерфейса (отличного от distinct) должно натолкнуть на мысль таки заглянуть в документацию, и прочитать что именно делает используемая команда, а не строить догадки. В то что ты не знал ни про uniq, ни про std::unique — верится с трудом


Везде разные имена, где-то distinct, где-то uniq, как в моем примере с Clojure и Elixir

EP>Что ты называешь "коммерческими", какие преимущества аргументации эта "коммерческость" даёт по сравнению со стандартизированной uniq?


Довольно очевидное — это некий устаявшийся паттерн поведения, который могу ожидать люди имевшие опыт с инструментом. Но, знаю-знаю, это не C++-путь, у нас надо изобрести свой правильный велосипед с квадратными колесами.

KP>>(distinct [2 2 1 5 4 4 4 ])

KP>>=> (2 1 5 4)

EP>Это странный пример в обсуждаемом контексте, так как unique/uniq выдаст такой же результат


Да премешай их как хочешь, ничего не изменится.

(distinct [2 4 1 2 5 4 4 ])
=> (2 4 1 5)
Re[4]: range-v3 и модный C++
От: Ватакуси Россия  
Дата: 26.07.20 11:57
Оценка:
N>Ну, это и правда больше упражнение, благо для матриц сейчас библиотек достаточно и вряд ли кто-то решит писать сам. А необходимость поиска нескольких минимальных/максимальных элементов иногда встречается, реализации из коробки нет, вот и приходится самому думать. Что предлагают делать разработчики на Питоне? Сортировать! На втором месте уже np.argpartition, про который говорят, что он сработает за линейное время, что неверно в общем случае. И только где-то там самый быстрый алгоритм — heapq.nlargest. Хотя именно с кучей можно быстрее всего найти k-top элементов. Не хочется, чтобы С++ уходил в эту же сторону, краткость не решает.

Не читай советских газет перед обедом (с)

def kth(a, n):
    m = a.shape[0]
    perc = (np.arange(m-n,m)+1.0)/m*100
    return np.percentile(a, perc)
Все будет Украина!
Отредактировано 26.07.2020 15:18 Ватакуси . Предыдущая версия .
Re[6]: range-v3 и модный C++
От: Ватакуси Россия  
Дата: 26.07.20 12:01
Оценка:
N>Да, у меня есть проф деформация и я не очень люблю Питон из-за этого. Иногда кажется, что программирование на нём сродни программированию на Делфи: "А какой компонет может сделать ххх?" Только в Питоне слово "компонет" заменяется на "пакет". (Это конечно снобизм, я на нём сам такой же и с удовольствием пишу говноутилиты для парсинга и перекладывания разных штук, не выходя за рамки стантартных пакетов.)
N>Но глобально, я не понимаю, что стоит за вывеской питоновских import xxx, ни тут, за вывеской ranges. И если что-то будет тормозить, то придётся не разбираться, а тупо переписывать. Мне стрёмно, когда я не могу посмотреть в отладчике какой-то код или вставить в него логи.

monkey patching?
Все будет Украина!
Re[7]: range-v3 и модный C++
От: Evgeny.Panasyuk Россия  
Дата: 26.07.20 12:27
Оценка:
Здравствуйте, kaa.python, Вы писали:

EP>>Ну она базируется на std::unique из C++1998.

KP>Это прекрасно, как сочетается std::unique и заявленная ленивость?

А что смущает? Например имя/интерфейс views::transform базируется на std::transform — одно ленивое, другое энергичное

KP>Везде разные имена, где-то distinct, где-то uniq, как в моем примере с Clojure и Elixir


Суть не в именах, а в том что в природе встречается и тот и другой интерфейс.

EP>>Что ты называешь "коммерческими", какие преимущества аргументации эта "коммерческость" даёт по сравнению со стандартизированной uniq?

KP>Довольно очевидное — это некий устаявшийся паттерн поведения, который могу ожидать люди имевшие опыт с инструментом. Но, знаю-знаю, это не C++-путь, у нас надо изобрести свой правильный велосипед с квадратными колесами.

Аллё гараж, какой ещё C++-путь, интерфейсу uniq(1) много десятков лет, он к тому же стандартизирован в POSIX.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.