LINUX.ORG.RU

[Racket 5.2] Вопрос по эффективности обработки структур данных


0

1

В Racket начал ковыряться не так давно. Сейчас обкатывается такая задачка:

Есть входной поток данных - пары «ключ-значение» (общий объём произвольный). Пары раскидываются по определённым критериям в несколько ассоциативных списков. Потом всё это парсится и по определённым правилам формируется...эммм...ну скажем так: «таблица решений». Пока эта таблица решений реализована тоже, как ассоциативный список. Можно было бы, как hash table (да, я знаю, что для hash О(1), а для alist О(n)), но что в этом случае нельзя будет применять функции обработки обычных списков (насколько я понял из доков). С другой стороны, итоговая таблица решений может «распухнуть» (размер пока трудно предсказать), и тогда скорость обработки становится критичной.

Недавно в ньюсах обсуждали релиз Racket 5.2. Там упоминалось обилие новых и вкусных (хотя и нестандартных) плюшек. В связи с этим - вопрос:

Есть ли в Racket 5.2 новые средства обработки структур данных (а может быть и новые структуры данных), повышающие эффективность? Да и вообще - поругайте как следует описанное выше решение (желательна конструктивная жёсткая критика).

Разумеется, я буду продолжать шерстить документацию, но вдруг найдутся опытные «рэкетисты», которые уже глубоко закопались или делали нечто подобное. В общем, если не влом, то подскажите и покритикуйте. Главное, чтобы по делу.



Последнее исправление: OldFatMan (всего исправлений: 1)

но что в этом случае нельзя будет применять функции обработки обычных списков (насколько я понял из доков)

for и его производные работают для всех итерабельных коллекций, в том числе и для хешей.

Есть ли в Racket 5.2 новые средства обработки структур данных (а может быть и новые структуры данных), повышающие эффективность?

Что значит «повышающие эффективность»?

anonymous
()
Ответ на: комментарий от anonymous

for и его производные работают для всех итерабельных коллекций, в том числе и для хешей.

Это я уже понял.

Что значит «повышающие эффективность»?

Производительность, скорость обработки (поиск, вставка, удаление etc)

OldFatMan
() автор топика
Ответ на: комментарий от anonymous

for и его производные работают для всех итерабельных коллекций, в том числе и для хешей.

В общем-то, и сам, поразмыслив, начал склоняться к переходу на hash table. Скорость важнее, ну а обработку (если штатной функциональности хватать не будет) сам уж как-нибудь наваяю. :)

OldFatMan
() автор топика
Ответ на: комментарий от OldFatMan

Производительность, скорость обработки (поиск, вставка, удаление etc)

И какого рода средства могут повысить скорость обработки, например, списков?

anonymous
()
Ответ на: комментарий от anonymous

1) Я не про списки вообще спрашиваю, а про alist и hash table.

2) Можно было не напрягаться с иронией, а просто написать, что «вопрос твой дурацкий». Можно было просто ответить: «юзай hash table, не валяй дурака, лучше всё равно не придумаешь». А можно было просто проигнорировать те части ОП, которые тебе показались особенно глупыми. А впрочем анонимусы любят своё ЧСВ чесать на подобных вопросах. :)

OldFatMan
() автор топика
Ответ на: комментарий от x4DA

Подумаю, конечно.

Но я хотел сначала «штатными» структурами обойтись, потому начал с alist и hash. Вот потому и спросил, не «изобрели» ли в 5.2 чего-то новенького. :)

OldFatMan
() автор топика

Есть ли в Racket 5.2 новые средства обработки структур данных?

Есть ли в новой версии маргинального языка нововведения по части давно известных человечеству вещей? Вопрос сложный.

С одной стороны — этой странной семейке уже больше 50 лет. Можно предположить, что за такое время все наработки разумного человечества в области алгоритмики были успешно освоены и включены в язык и/или библиотеку; поэтому новшества представляются маловероятными. С другой стороны, текущее незавидное положение лисп-подобных языков свидетельствует о том, что 50 лет были потрачены на что угодно — на вычисления зигохистоморфных препроморфизмов, анафорических лямбд, шестистрочных вложенных квазиквотаций и пандорических захватов — но только не на практические, полезные человечеству вещи. Таким образом, для лиспа даже в XXI веке имеется простор для открытий — правда, уже совершённых (и не раз) в нормальных языках программирования.

Если вас интересуют эффективные алгоритмы, то я бы рекомендовал в первую очередь поинтересоваться инструментами с многолетней успешной историей применения в этой области. И лишь в последнюю — инструментами, с различной степенью успеха балансирующими на грани маргинальности.

anonymous
()
Ответ на: комментарий от anonymous

Таким образом, для лиспа даже в XXI веке имеется простор для открытий — правда, уже совершённых (и не раз) в нормальных языках программирования.

гы-гы-гы... :)

интересно, что это - феерическое, агрессивное невежество в стиле Шарикова, или троллинг уровня средней школы?

ak366803
()
Ответ на: комментарий от ak366803

интересно, что это - феерическое, агрессивное невежество в стиле Шарикова, или троллинг уровня средней школы?

Если Вы воспринимаете констатацию объективных фактов как невежество или провокацию, то мне Вас искренне жаль.

гы-гы-гы... :)

Без комментариев.

anonymous
()
Ответ на: комментарий от anonymous

Если Вы воспринимаете констатацию объективных фактов как невежество или провокацию, то мне Вас искренне жаль.

если Вы считаете, что субъективное мнение, демонстрирующее безграмотность, - констатация объективных фактов, то мне Вас искренне жаль

ak366803
()
Ответ на: комментарий от anonymous

Это — баттхёрт. Привыкай к нему.

в моей фразе не было ни слова про субъективные ощущения - попал пальцем в небо

ak366803
()
Ответ на: комментарий от OldFatMan

2) Можно было не напрягаться с иронией

Никакой иронии, я просто подумал, что ты как-то криво выразился.

anonymous
()
Ответ на: комментарий от anonymous

Ок. Если бы ты сразу подсказал, например, про те же деревья, не было бы нужды взаимными «шпильками» обмениваться. Но, видимо, на лоре так не получится. :)

OldFatMan
() автор топика
Ответ на: комментарий от anonymous

Почесал? Зудеть поменьше стало? Ну вот и славненько.

OldFatMan
() автор топика
Ответ на: комментарий от anonymous

Что именно в вопросе было неправильно сформулировано и почему он задан неправильно?

Может быть, кому-то надо просто внимательно прочитать написанное, а не пробежаться по диагонали? И чуть убавить снобизма?

OldFatMan
() автор топика
Ответ на: комментарий от OldFatMan

Ой, блин, каюсь, ежели глупость какую сотворил. А что в стартовом посте действительно был вопрос о поддерживаемых структурах?

anonymous
()
Ответ на: комментарий от anonymous

А что - не было?

Есть ли в Racket 5.2 новые средства обработки структур данных (а может быть и новые структуры данных), повышающие эффективность?

OldFatMan
() автор топика
Ответ на: комментарий от OldFatMan

А что - не было?
> Есть ли в Racket 5.2 новые средства обработки структур данных (а может быть и новые структуры данных), повышающие эффективность?

Ответ - да. Доволен ответом?

anonymous
()
Ответ на: комментарий от OldFatMan

Может быть, кому-то надо просто внимательно прочитать написанное, а не пробежаться по диагонали? И чуть убавить снобизма?

это не снобизм, это совершенно верная, рациональная реплика

ak366803
()
Ответ на: комментарий от OldFatMan

Вот потому и спросил, не «изобрели» ли в 5.2 чего-то новенького. :)

это совершенно без труда читается в release notes, причем с комментариями и пояснениями от авторов в блоге

ak366803
()
Ответ на: комментарий от OldFatMan

А впрочем анонимусы любят своё ЧСВ чесать на подобных вопросах. :)

это некоторые любят раздражать нежеланием поднять палец и набрать адрес сайта racket-lang.org, где в рассылках просто замечательные, интересные дискуссии на подобные темы

ak366803
()

Решение принято. Поэтому тему считаю закрытой. Благодарю всех высказавшихся.

OldFatMan
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.