Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
 Аватар для zeroalef
200 / 236 / 33
Регистрация: 29.03.2019
Сообщений: 667

Пора задать жару всяким питонщикам и шарпистам

14.03.2021, 22:39. Показов 5998. Ответов 97
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне пришло в ЛС (как, наверное и всем остальным) https://www.cyberforum.ru/cont... 87489.html. Похоже я один из лисперов кто там отметился, присоединяйтесь, бунтари и вольнодумцы! Ударим автопробегом по бездорожью.. твёрдой рукой по бездарным былокодам!
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2021, 22:39
Ответы с готовыми решениями:

Просветите меня по всяким файлохранилищам.
Поразмышляв, понял, что мой сайт скучноват - одна текстовая информация. Решил поместить какие то файлы (песни, клипы и т. д.) Чтоб не...

В жару не запускаеться кондер
Добрый день! Машина Тойота Авенсис 3, 2012г, кондиционер работает все отлично, но когда на улице градусов 18 и ниже, если жара и постоит...

В жару процессор под нагрузкой греется до 70 градусов
Всем привет, у меня FX 8300 в связке с gtx 970 от Palit/ Проц я пока гнать не собирался поэтому купил бюджетные варианты матери и...

97
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.03.2021, 10:20
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Catstail Посмотреть сообщение
а iterate видели?
iterate — это «чуть более фичастый аналог» loop, насколько я понимаю.

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

Например, в Java интерфейс Iterator имеет два основных метода: hasNext, возвращающий true или false, и next, одновременно возвращающий текущий элемент и делающий шаг к следующему (итераторов может отличаться от языка к языку). Соответственно итератор можно использовать в любом цикле, хоть for, хоть while, хоть вообще не в цикле.

Вот я и прошу показать итератор для hash-table, который можно было бы использовать хоть в iter, хоть в loop, хоть в do, хоть в tagbody + go, хоть в рекурсивной функции.

В Racket, например, есть Sequences and Streams для этого. В Хаскелле, за счёт ленивости, можно просто списки использовать для этого.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38214 / 21147 / 4313
Регистрация: 12.02.2012
Сообщений: 34,760
Записей в блоге: 14
23.03.2021, 10:30
korvin_, осторожно спрошу: а есть проблема такой объект сделать? Другими словами - в Лиспе это, что - в принципе невозможно?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.03.2021, 10:50
Цитата Сообщение от helter Посмотреть сообщение
Кстати, про iterate - хорошее замечание. Перенести вопрос в плоскость синтаксиса - вероятно, многим это покажется неожиданным решением.
Я бы не назвал это решением: итераторы — это не просто «финтифлюшка», а барьер абстракций (привет, SICP), протокол между «клиентом» (кодом, обрабатывающим набор данных) и «сервисом» (коллекцией).

Вот есть у нас:

– m клиентов: tagbody/go, do, loop, iter, map, filter, reduce, …
– n сервисов: списки, массивы, строки, множества, ассоциативные массивы, хэш-таблицы, …

Итого m×n возможных комбинаций.

С итераторами нам достаточно реализовать m+n сущностей и дальше комбинировать их любыми способами. Как, например, в Racket: различные виды циклов for можно легко комбинировать с любыми последовательностями.
Без итераторов (или ещё каких аналогичных механизмов), как в случае с hash-table в C,L нам придётся реализовать m×n комбинаций.

Добавлено через 1 минуту
Цитата Сообщение от Catstail Посмотреть сообщение
а есть проблема такой объект сделать?
Ну-у, да, есть. Существующий набор функций для работы с hash-table в CL не позволяет этого сделать. Насколько я знаю, по крайней мере. Потому и просил показать пример. Вдруг, таки, проблемы нет.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38214 / 21147 / 4313
Регистрация: 12.02.2012
Сообщений: 34,760
Записей в блоге: 14
23.03.2021, 11:13
korvin_, мне кажется, Вы несколько преувеличиваете. "Все можно наладить, если достаточно долго вертеть в руках".
0
Заблокирован
23.03.2021, 11:38
Цитата Сообщение от korvin_ Посмотреть сообщение
С итераторами нам достаточно реализовать m+n сущностей и дальше комбинировать их любыми способами.
В Clojure прикольно решён этот вопрос - там любые коллекции внутри превращаются в последовательности, что позволяет использовать один и тот же функционал для разных типов коллекций.

Lisp
1
2
3
4
5
6
;map для списков
(map * '(1 2 3) '(10 20 30))
;map для векторов
(map * [1 2 3] [1 2 3])
;map для наборов
(map * #{1 2 3} #{10 20 30})
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.03.2021, 11:42
Цитата Сообщение от RatPoison Посмотреть сообщение
В Clojure прикольно решён этот вопрос

Не по теме:

Ага, она построена поверх JVM и JDK )



Добавлено через 1 минуту
Цитата Сообщение от Catstail Посмотреть сообщение
мне кажется, Вы несколько преувеличиваете
Когда кажется, креститься надо Больше крестишься — больше кажется.
Нет, не преувеличиваю.

Цитата Сообщение от Catstail Посмотреть сообщение
"Все можно наладить, если достаточно долго вертеть в руках".
Или не наладить. А продолжить бесконечно вертеть.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38214 / 21147 / 4313
Регистрация: 12.02.2012
Сообщений: 34,760
Записей в блоге: 14
23.03.2021, 11:44
korvin_, если в iter добавить итерирование по хэш-таблице - этого не достаточно? Речь об этом?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.03.2021, 11:46
Цитата Сообщение от RatPoison Посмотреть сообщение
В Clojure прикольно решён этот вопрос - там любые коллекции внутри превращаются в последовательности, что позволяет использовать один и тот же функционал для разных типов коллекций.
Это и есть итераторы/последовательности — общий протокол между filter/map/reduce/… и list/set/vector/…
0
Заблокирован
23.03.2021, 11:48
korvin_, не знаю что там в СL, но могу предположить, что вашу проблему, например, можно решить превращением хеш-таблицы в список внутри и тогда определить метод next для хеш-таблицы не составит особого труда.

Добавлено через 1 минуту
Цитата Сообщение от korvin_ Посмотреть сообщение
Это и есть итераторы/последовательности
Ну это вы так называете. А в Clojure это называется абстракциями над коллекциями вроде)
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.03.2021, 11:55
Цитата Сообщение от Catstail Посмотреть сообщение
если в iter добавить итерирование по хэш-таблице - этого не достаточно?
Нет, не достаточно, речь не про добавление поддержки какой-то коллекции в какой-то цикл, речь про создание итератора/последовательности/потока из объекта существующего типа коллекции, который можно будет использовать в любом цикле без модификаций оного.

Если ты под добавлением в iter подразумеваешь что-то вроде being hash-key/hash-value в loop, то нет, это не то. Если то, что ты предлагаешь сделать, можно использовать в loop, do и т.д., то да, это то.

Добавлено через 1 минуту
Цитата Сообщение от RatPoison Посмотреть сообщение
не знаю что там в СL, но могу предположить, что вашу проблему, например, можно решить превращением хеш-таблицы в список внутри
Внутри чего? И ты что, предлагаешь, например, в дополнении к хэш-таблице на миллион элементов построить ещё и список в миллион элементов? )

Цитата Сообщение от RatPoison Посмотреть сообщение
А в Clojure это называется абстракциями над коллекциями вроде)
Да без разницы.

Добавлено через 2 минуты
Цитата Сообщение от RatPoison Посмотреть сообщение
Ну это вы так называете.
Не я:
Цитата Сообщение от RatPoison Посмотреть сообщение
любые коллекции внутри превращаются в последовательности
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38214 / 21147 / 4313
Регистрация: 12.02.2012
Сообщений: 34,760
Записей в блоге: 14
23.03.2021, 12:00
korvin_, да, соглашусь. Понятное дело... CL создавался достаточно давно (общая концепция итераторов еще "не созрела"). Хотя намеки есть и в CL. В этом смысле хэш - это "чужеродный" объект. Так что правда Ваша. Хотя я в своих мелочах давно не использую do - только iter. А добавить туда хэш - технический вопрос.
0
Заблокирован
23.03.2021, 12:02
Цитата Сообщение от korvin_ Посмотреть сообщение
Внутри чего? И ты что, предлагаешь, например, в дополнении к хэш-таблице на миллион элементов построить ещё и список в миллион элементов? )
А в чём проблема?
Возьмём к примеру Rust.
Там нет функции из коробки, которая сортирует хеш-таблицу.
Алгоритм решения этой проблемы такой - построить из хеш таблицы вектор кортежей, где каждый кортеж в векторе - это ключ и значение. И потом уже отсортировать вектор по значению содержащемуся в каждом кортеже.
Я недавно делал небольшую утилиту, которая считает сколько раз каждое слово встречается в тексте и как раз использовал этот алгоритм.
Подсчёт 15000 заняло 0.3 секунды не смотря на такую конвертацию.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.03.2021, 12:10
Цитата Сообщение от Catstail Посмотреть сообщение
CL создавался достаточно давно (общая концепция итераторов еще "не созрела")
Это в 94-м то концепция итераторов не созрела? )) Вполне себе созрела, да и можно было любое своё решение придумать. Всё таки, умные люди стандартом занимались. Думаю, причина больше в том, что важной (если не основной) целью создание стандарта было объединение фичей существующих мейнстримных реализаций лиспа, и он и так получился достаточно большой, чтобы туда ещё какие-то фичи добавлять. Но это лишь предположение.

Цитата Сообщение от Catstail Посмотреть сообщение
В этом смысле хэш - это "чужеродный" объект.
Нет. С чего бы?

Цитата Сообщение от RatPoison Посмотреть сообщение
А в чём проблема?
Проблема в неоправданном потреблении памяти и процессорного времени (двойной обход).

Цитата Сообщение от RatPoison Посмотреть сообщение
Я недавно делал небольшую утилиту, которая считает сколько раз каждое слово встречается в тексте и как раз использовал этот алгоритм.
Подсчёт 15000 заняло 0.3 секунды не смотря на такую конвертацию.
Для учебной программки может такой подход и ок, но не для «production»-кода.
0
Заблокирован
23.03.2021, 12:18
Цитата Сообщение от korvin_ Посмотреть сообщение
Внутри чего?
внутри функции, которая будет работать с хешем.
Опять возвращаясь к Rust: есть функция которая превращает любую коллекцию в итератор - inti_iter.
И когда мы пишем такой код

C
1
2
3
4
5
6
7
8
fn main() {
    
    let mut v  = vec![1, 2, 3, 4, 5];  
    
    for i in &mut vec {}
      println!("{}", i);
   }
}
Он компилятором преобразуется примерно вот в такой

C
1
2
3
4
5
6
7
8
9
10
fn main() {
    
    let mut v  = vec![1, 2, 3, 4, 5];  
    let mut iter = (&mut v).into_iter();
 
    while let Some(item) = iter.next() {
      println!("{}", item);
    }
 
}
Добавлено через 6 минут
Цитата Сообщение от korvin_ Посмотреть сообщение
Для учебной программки может такой подход и ок, но не для «production»-кода.
Такой подход используется всеми, так как другого подхода просто нет.
Сначала нужно понимать, что хеш-таблица - это не нативный тип данных, который можно взять и отсортировать просто так.
Обычно это связанный список, который расширяется динамически, где есть есть поля - ключ, значение и указатель на следующую ноду.
Чтобы это отсортировать нужно использовать другую коллекцию как ни крути.

Или взять тот же Clojure - там коллекции преобразуются в последовательности, что заложено в самом языке, а вы говорите, что это не prodaction)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38214 / 21147 / 4313
Регистрация: 12.02.2012
Сообщений: 34,760
Записей в блоге: 14
23.03.2021, 12:21
Цитата Сообщение от korvin_ Посмотреть сообщение
Нет. С чего бы?
- а если бы он был бы "родным", что мешало увязать в единый интерфейс? П.Грэму извилин не хватило?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.03.2021, 12:25
Цитата Сообщение от RatPoison Посмотреть сообщение
Опять возвращаясь к Rust: есть функция которая превращает любую коллекцию в итератор - inti_iter.
Ну окей, и что? )

Цитата Сообщение от RatPoison Посмотреть сообщение
Такой подход используется всеми, так как другого подхода просто нет.
Как это нет?

Можно создать пустой список (динамический массив), пройтись по хэш-таблице и вставлять элементы в список, сохраняя порядок. В результате у тебя сразу отсортированный список.

Цитата Сообщение от RatPoison Посмотреть сообщение
Сначала нужно понимать, что хеш-таблица - это не нативный тип данных, который можно взять и отсортировать просто так.
Как это вообще всё связано?

Цитата Сообщение от RatPoison Посмотреть сообщение
Обычно это связанный список, который расширяется динамически
Э-э… Нет. Связные списки могут использоваться для bucket'ов при коллизиях, но сама хэш-таблица — не связный список.

Цитата Сообщение от RatPoison Посмотреть сообщение
Чтобы это отсортировать нужно использовать другую коллекцию как ни крути.
А, ну, в целом, да. in-place сортировка не возможна в принципе, но двойной обход делать не обязательно.
0
Заблокирован
23.03.2021, 12:31
Цитата Сообщение от korvin_ Посмотреть сообщение
Нет. Связные списки могут использоваться для bucket'ов при коллизиях, но сама хэш-таблица — не связный список.
Все зависит от реализации. В Rust часто коллекции реализуются с помощью перечислений, которые преобразуются в списки.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.03.2021, 13:12
Цитата Сообщение от Catstail Посмотреть сообщение
- а если бы он был бы "родным", что мешало увязать в единый интерфейс?
В смысле? Что значит «родной»/«не родной» и как это относится к вопросу? И для CL хэш-таблицы «родные», т.к. в стандарте. Я уже написал, что помешало, на мой взгляд.

Цитата Сообщение от Catstail Посмотреть сообщение
П.Грэму извилин не хватило?
При чём тут П.Грэм?

Цитата Сообщение от RatPoison Посмотреть сообщение
Все зависит от реализации.
Не зависит по определению.

Добавлено через 3 минуты
Цитата Сообщение от Catstail Посмотреть сообщение
- а если бы он был бы "родным", что мешало увязать в единый интерфейс?
Вот Google Guava collections, например, «неродные» для Java, но это не мешает им реализовывать интерфейс Iterator.
0
 Аватар для zeroalef
200 / 236 / 33
Регистрация: 29.03.2019
Сообщений: 667
23.03.2021, 13:43  [ТС]
Цитата Сообщение от RatPoison Посмотреть сообщение
Там нет функции из коробки, которая сортирует хеш-таблицу.
Алгоритм решения этой проблемы такой - построить из хеш таблицы вектор кортежей
Я что-то припоминаю в разделе си. У меня тогда возникло стойкое ощущение что вы делаете "всё не так, как надо" (с).
Цитата Сообщение от RatPoison Посмотреть сообщение
Сначала нужно понимать, что хеш-таблица - это не нативный тип данных, который можно взять и отсортировать просто так.
Как по мне, то хеш-таблица -- не та структура данных, которую надо сортировать. Возможно, вы упустили более простое решение, которое было на поверхности. Кстати, вот и оно:
Цитата Сообщение от korvin_ Посмотреть сообщение
Можно создать пустой список (динамический массив), пройтись по хэш-таблице и вставлять элементы в список, сохраняя порядок.
изначально даже минуя хеш-таблицу, но с реализацией поиска в списке по хеш-функции.
0
Заблокирован
23.03.2021, 13:50
Цитата Сообщение от korvin_ Посмотреть сообщение
Не зависит по определению.
Чего там пишут?)

Добавлено через 6 минут
Цитата Сообщение от zeroalef Посмотреть сообщение
Я что-то припоминаю в разделе си. У меня тогда возникло стойкое ощущение что вы делаете "всё не так, как надо" (с).
Ваша паямть вас подвела)
В разделе СИ я никогда ничего не писал про хеш-таблиццы)
Цитата Сообщение от zeroalef Посмотреть сообщение
Возможно, вы упустили более простое решение, которое было на поверхности. Кстати, вот и оно:
Я ничего не упускал. Мне это решение предложил сам язык. И не Си, а Rust.
Цитата Сообщение от zeroalef Посмотреть сообщение
Как по мне, то хеш-таблица -- не та структура данных, которую надо сортировать. Возможно, вы упустили более простое решение, которое было на поверхности. Кстати, вот и оно:
Цитата Сообщение от zeroalef Посмотреть сообщение
У меня возникло стойкое ощущение что вы делаете "всё не так, как надо" (с).
А какой у хеш-таблицы порядок, простите, можно узнать?)
Вам нужно отсортировать хеш-таблицу по ключу. Вы по порядку переведёте ее в список и что? Где сортировка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.03.2021, 13:50

Будет ли работать такая схема при отключениях в жару?
Ребята привет, у меня холодильник Саратов 2, за городом, ему под шестьдесят. Вопрос, у меня ИБП для котла паспортная мощность 600 вт,...

Непроизвольно открываются вкладки со всяким мусором(казино, браузерные игры, бинарные опционы и т.д.)
дело вот в чём: я пытался скачать себе алкоголь (прогу для открытия iso файлов, создания образов дисков), и так получилось, что он не...

Пора суток
Составить программу, которая за введенным временем определяла бы пору суток, ночь или день (считать, что ночные часы с 23.00 до 07.00).

пора решать)
http://s43.***********/i099/1306/10/6d956f20848a.jpg

Пора изучать С++
Если, я полностью знаю Delphi (90%), 1. C++ Builder будеть ли мне легче? 2. Или сначала изучать С++? 3. Ваше предложение. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru