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

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

14.03.2021, 22:39. Показов 5995. Ответов 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
 Аватар для zeroalef
200 / 236 / 33
Регистрация: 29.03.2019
Сообщений: 667
23.03.2021, 16:31  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от RatPoison Посмотреть сообщение
покажите это на Rust наглядно, пожалуйста
Попробую сегодня. Настроение хорошее, время есть и делать нечего. Самое сложное будет вспомнить как пользоваться rust'ом. Поделитесь кодом, отвечающим за чтение и вычленение слов из текста, для экономии времение и нервов.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.03.2021, 16:33
Цитата Сообщение от RatPoison Посмотреть сообщение
Еще картинка, которая наглядно показывает метод цепочек.
И ты на этой картинке массива не видишь, да?
0
Заблокирован
23.03.2021, 16:39
Цитата Сообщение от zeroalef Посмотреть сообщение
Попробую сегодня. Настроение хорошее, время есть и делать нечего. Самое сложное будет вспомнить как пользоваться rust'ом. Поделитесь кодом, отвечающим за чтение и вычленение слов из текста, для экономии времение и нервов.
держите

Кликните здесь для просмотра всего текста

Rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
use std::fs;
use std::env;
use std::io::{self, prelude::*};
use std::collections::HashMap;
 
fn clean_out_word(word: &str) -> String {
   let clean_word = word.chars().filter(|&c| char::is_alphabetic(c) || char::is_numeric(c)).collect::<String>();
   clean_word.to_lowercase()
  
}
 
//передаём в эту функцию нашу строку в которую вы ранее считали файл
fn flood_hash(buffer: &String, hash: &mut HashMap<String, u16>) { 
    for line in buffer.lines() {  //разбиваем строку на подстроки с помощью метода lines
      for word in line.split_whitespace() {   //разбиваем подстроки на слова с помощью метода split_whitespace
        let clean_word = clean_out_word(word);
        if clean_word.len() > 0 {
          let counter = hash.entry(clean_word.to_string()).or_insert(0);
          *counter += 1;
        } 
      }
    }    
  }
 
 
fn sort_hash(hash: HashMap<String, u16>) -> Vec<(String, u16)> {
    let mut vhash: Vec<(String, u16)> = hash.into_iter().collect();
    vhash.sort_by(|a, b| b.1.cmp(&a.1));
    vhash
 }
 
fn printout_vhash(hash: &Vec<(String, u16)>) {
    let mut counter = 1;
    
    for (key, value) in hash {
      println!("{}) {} {}", counter, key, value);
      counter += 1;
    }
 }
 
fn main() -> () {
    
    let args = env::args().collect::<Vec<String>>();
    let args_len = args.len();
 
    if args_len < 2 || args_len > 2 {
       eprintln!("USAGE: {} filename", args[0]);
       return ()  
    }
  
    let buffer: String = fs::read_to_string(&args[1]).unwrap();  //читаем весь файл в строку
    let buffer_len = buffer.len();
    
    if buffer_len == 0 {
        eprintln!("File is empty");
        return ()
    } else if buffer_len == 1 {
        println!("{} {}", buffer, 1);
        return ()
    } else if buffer_len == 2 {
        let temporary = buffer.split_whitespace().collect::<Vec<&str>>();
          if temporary[0] == temporary[1] {
             println!("{} {}", temporary[0], 2);
             return (); 
         } else {
             println!("{} {}", temporary[0], 1);
             println!("{} {}", temporary[1], 1);
             return ();
       }
    }
    
    let mut hash: HashMap<String, u16> = HashMap::new();
    
    if buffer_len >= 5000 {
      let mesg = "...программа выполняется..\n".as_bytes();
      let mut stderr = io::stderr();
      stderr.write(&mesg).expect("Немогу записать mesg в stderr");
      
    }
 
    
    flood_hash(&buffer, &mut hash);
    let vhash = sort_hash(hash); 
    printout_vhash(&vhash);
 
 
}


Добавлено через 2 минуты
Цитата Сообщение от korvin_ Посмотреть сообщение
И ты на этой картинке массива не видишь, да?
В массиве хранятся указатели на List.
Не скажите так, вы говорили изначально, что там нет никаких списков.
Потом вы сказали, что списки не создаются если нет коллизий.
Так что мы видим?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.03.2021, 17:00
Цитата Сообщение от RatPoison Посмотреть сообщение
В массиве хранятся указатели на List.
Не скажите так, вы говорили изначально, что там нет никаких списков.
Потом вы сказали, что списки не создаются если нет коллизий.
Так что мы видим?
Мы видим, что ты не умеешь читать:
Цитата Сообщение от korvin_ Посмотреть сообщение
Э-э… Нет. Связные списки могут использоваться для bucket'ов при коллизиях, но сама хэш-таблица — не связный список.
0
Заблокирован
23.03.2021, 17:09
korvin_, я уже выше говорил - да, это массив указателей на LinkedList.
Что дальше? Вам все равно нужно иметь дело с LinkedList в конечном итоге.
Я, честно говоря, уже устал от того, что люди на этом форуме хотят чтобы последнее слово всегда было за ними, даже если они не правы. Думаю, это что-то психологическое. Некое желание утвердиться. Возможно это связано с тем, что здесь только одни программисты-теоретики в основном. Тот же Catstail, который куда больше лет в этом деле и у которого есть свои реальные большие проекты, может сказать, что да, мол, я сделал это не совсем оптимально, лучше сделать иначе. Человеку просто незачем что-то пыжиться доказывать просто так, он в этом деле давно и делает реальные вещи. А теоретики будут упираться до упора, чтобы доказать всем окружающим, что они правы и знают все на свете. Думаю это из-за того, что им больше нечем это доказывать кроме как словами. Хотя не знать чего-то - это нормально. Нельзя знать всего. Это очевидно.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.03.2021, 17:35
Цитата Сообщение от RatPoison Посмотреть сообщение
я уже выше говорил - да, это массив указателей на LinkedList.
А начал с этого:
Цитата Сообщение от RatPoison Посмотреть сообщение
Обычно это связанный список, который расширяется динамически
С чем ты споришь? Хочешь, чтобы последнее слово всегда было за тобой?

Цитата Сообщение от RatPoison Посмотреть сообщение
Вам все равно нужно иметь дело с LinkedList в конечном итоге.
Это вообще несущественно, тем более, что
1) его может и не быть, если используется открытая адресация
2) там может быть дерево, например, как в JDK11+
3) механизм разрешения коллизий — не то из-за чего берут хеш-таблицу, и не её суть.

При чём тут какая «теоретичность»/«практичность», если знания структур данных и их свойств — неотъемлемая часть их практического применения, вообще не понятно.
0
 Аватар для zeroalef
200 / 236 / 33
Регистрация: 29.03.2019
Сообщений: 667
23.03.2021, 18:01  [ТС]
RatPoison, ну в целом я, как мне кажется, нашел то что нужно. Для вашей задачи надо было брать не HashMap, а IndexMap, который имеет метод par_sort_by. Осталось только поднять rust окружение, настроить emacs и внести пару правок в представленный листинг. Но это уже потом. Или на слово поверите?

Добавлено через 8 минут
RatPoison, вобще, спасибо вам за то что вы разбудили мой давно завявший интерес к rust'у.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38212 / 21145 / 4313
Регистрация: 12.02.2012
Сообщений: 34,759
Записей в блоге: 14
23.03.2021, 19:09
Цитата Сообщение от korvin_ Посмотреть сообщение
Что значит «родной»/«не родной» и как это относится к вопросу?
- для Лиспа "родное" - это последовательность. Хэш-массив - это не совсем последовательность. Я имел в виду это.
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
23.03.2021, 20:20
Цитата Сообщение от korvin_ Посмотреть сообщение
iterate — это «чуть более фичастый аналог» loop, насколько я понимаю.
Вот я и прошу показать итератор для hash-table, который можно было бы использовать хоть в iter, хоть в loop, хоть в do, хоть в tagbody + go, хоть в рекурсивной функции.
А чем это стандартное не оно?
http://l1sp.org/cl/with-hash-table-iterator

Добавлено через 13 минут
Цитата Сообщение от korvin_ Посмотреть сообщение
Это в 94-м то концепция итераторов не созрела? )) Вполне себе созрела, да и можно было любое своё решение придумать. Всё таки, умные люди стандартом занимались. Думаю, причина больше в том, что важной (если не основной) целью создание стандарта было объединение фичей существующих мейнстримных реализаций лиспа, и он и так получился достаточно большой, чтобы туда ещё какие-то фичи добавлять. Но это лишь предположение.
Свое решение описано вместе c черновиком стандарта
https://cliki.net/series
0
Заблокирован
23.03.2021, 20:48
Цитата Сообщение от korvin_ Посмотреть сообщение
С чем ты споришь? Хочешь, чтобы последнее слово всегда было за тобой?
Да мне вообще всё равно.
Цитата Сообщение от korvin_ Посмотреть сообщение
А начал с этого:
Началось все с того, что я рассказал, как я сортировал хеш-таблицу в Rust, а вы сказали, что это фу-фу.

Цитата Сообщение от korvin_ Посмотреть сообщение
2) там может быть дерево, например, как в JDK11+
Неужели? Ты ж говорил ранее, что только вектора могут быть)
Ладно, спрошу последний вопрос: а мы можем указатели на Списки хранить в списке, а не в векторе?

Добавлено через 8 минут
Цитата Сообщение от zeroalef Посмотреть сообщение
Или на слово поверите?
Да, Я глянул уже документацию и верю)
Но это сторонний крейт, который потянет за собой зависимости.

Цитата Сообщение от zeroalef Посмотреть сообщение
RatPoison, вобще, спасибо вам за то что вы разбудили мой давно завявший интерес к rust'у.
Да не за что.
Я вообще много языков всяких попробовал и среди них не так уж много тех, которые готовы порадовать пользователя хорошим содержанием.
Rust и Racket в их числе - и GUI, и Web и много чего еще.
Ну и С будет жить вечно)
0
 Аватар для zeroalef
200 / 236 / 33
Регистрация: 29.03.2019
Сообщений: 667
23.03.2021, 21:19  [ТС]
Цитата Сообщение от antares0 Посмотреть сообщение
А чем это стандартное не оно?
Тем что это отдельный интерфейс и для абстрактного типа этот случай придется обрабатывать отдельно. Хотя тот факт что именно хеш-таблица как контейнер содержит два значения, а не одно, как списки/массивы/векторы возможно и оправдывает подобное решение. Это мне подумалось пока писал данный текст.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.03.2021, 21:40
Цитата Сообщение от antares0 Посмотреть сообщение
А чем это стандартное не оно?
http://l1sp.org/cl/with-hash-table-iterator
Тем, что generator-fn там macro, определённый через macrolet — не first-class citizen: нельзя инициализировать им переменную, передать его в функцию и т.п.

А если попробовать посмотреть, как он реализуется, то обнаружится, что там всякая implementation-dependent жесть, которую пытаться как-то использовать, чтобы реализовать себе итератор себе дороже, и не факт, что получится это сделать для каждой реализации. При этом непонятно, почему нельзя просто вернуть #'it-fun которая таки является итератором.

Кликните здесь для просмотра всего текста

Lisp
1
2
3
4
5
6
7
(pprint
 (macroexpand
  '(with-hash-table-iterator (it hash-table)
    (loop
      (multiple-value-bind (more? key value) (it)
        (unless more? (return))
        (format t "~a => ~a~%" key value))))))
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(LET ((#:IT-FUN
       (LET* ((SB-IMPL::TABLE HASH-TABLE)
              (SB-IMPL::SIZE
               (* 2 (LENGTH (SB-IMPL::HASH-TABLE-NEXT-VECTOR SB-IMPL::TABLE))))
              (SB-INT:INDEX 3))
         (DECLARE (FIXNUM SB-INT:INDEX))
         (LABELS ((IT ()
                    (LET ((SB-IMPL::KV-VECTOR
                           (SB-IMPL::HASH-TABLE-TABLE SB-IMPL::TABLE)))
                      (LOOP (WHEN (>= SB-INT:INDEX SB-IMPL::SIZE) (RETURN NIL))
                            (LET ((SB-IMPL::I SB-INT:INDEX))
                              (INCF (TRULY-THE SB-INT:INDEX SB-INT:INDEX) 2)
                              (LET ((SB-IMPL::VALUE
                                     (AREF SB-IMPL::KV-VECTOR SB-IMPL::I)))
                                (UNLESS
                                    (SB-IMPL::EMPTY-HT-SLOT-P SB-IMPL::VALUE)
                                  (LET ((SB-IMPL::KEY
                                         (LOCALLY
                                          (DECLARE
                                           (OPTIMIZE
                                            (SB-C::INSERT-ARRAY-BOUNDS-CHECKS
                                             0)))
                                          (AREF SB-IMPL::KV-VECTOR
                                                (1- SB-IMPL::I)))))
                                    (UNLESS
                                        (SB-IMPL::EMPTY-HT-SLOT-P SB-IMPL::KEY)
                                      (RETURN
                                       (VALUES T SB-IMPL::KEY
                                               SB-IMPL::VALUE)))))))))))
           #'IT))))
  (MACROLET ((IT ()
               '(FUNCALL #:IT-FUN)))
    (LOOP
     (MULTIPLE-VALUE-BIND (MORE? KEY VALUE)
         (IT)
       (UNLESS MORE? (RETURN))
       (FORMAT T "~a => ~a~%" KEY VALUE)))))


Добавлено через 3 минуты
Цитата Сообщение от RatPoison Посмотреть сообщение
Неужели? Ты ж говорил ранее, что только вектора могут быть)
Ты снова не читаешь, что я пишу. Вместо списков как реализации bucket'ов может быть дерево.

Цитата Сообщение от RatPoison Посмотреть сообщение
Ладно, спрошу последний вопрос: а мы можем указатели на Списки хранить в списке, а не в векторе?
Ты можешь что угодно хранить в чём угодно. Хэш-таблица хранит в массиве.
0
Заблокирован
23.03.2021, 21:47
Цитата Сообщение от korvin_ Посмотреть сообщение
Ты можешь что угодно хранить в чём угодно
Ну и в чём тогда вопрос?)
0
23.03.2021, 22:11

Не по теме:

Цитата Сообщение от RatPoison Посмотреть сообщение
Ну и в чём тогда вопрос?)
Я не задавал никаких вопросов.

0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
23.03.2021, 22:25
Цитата Сообщение от korvin_ Посмотреть сообщение
Тем, что generator-fn там macro, определённый через macrolet — не first-class citizen: нельзя инициализировать им переменную, передать его в функцию и т.п.
В функцию можно передать замыкание лямбдой в котором будет использован это macrolet

Добавлено через 9 минут
Цитата Сообщение от korvin_ Посмотреть сообщение
При этом непонятно, почему нельзя просто вернуть #'it-fun которая таки является итератором.
Потому что способность абстракной реализации CL оптимизировать много-много таких вызовов не всегда очевидна.А в стандарте итератор засунут для производных абстраций типа Iterate где это проблема конкретного програмиста. Сам выберет как практичнее.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
24.03.2021, 14:09
Блин, я понял, где у меня косяк в решении.

Я ничтоже сумняшеся печатаю приближения в строку, а потом (обрезав девятки справа) возвращаю по литере. Но максимальная длина строки - заведомо fixnum. Цифры надо честно считать, арифметикой. В принципе, это даже не так нудно, потому что общее число цифр мы знаем априори, а хвост из девяток легко обрезать сразу. Короче, чёртушка даст мне первый пароль, длина которого вылезает за array-dimension-limit.
1
 Аватар для zeroalef
200 / 236 / 33
Регистрация: 29.03.2019
Сообщений: 667
24.03.2021, 16:04  [ТС]
helter, там уже народ требует 2млрд знаков =))
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
24.03.2021, 17:39
Если это мотивация для использования более экономных алгоритмов, то смысл, пожалуй, есть. (Была бы охота.) В модульном решении алгоритм легко заменять.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.03.2021, 17:39

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
98
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
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). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru