Форум программистов, компьютерный форум, киберфорум
Языки JVM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.10.2014
Сообщений: 7

Clojure Сортировка атомов списка по частоте появления

09.10.2014, 15:53. Показов 1038. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите решить задачу:

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

Привести набор тестовых вызовов описанной функции, демонстрирующих все
варианты ее работы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2014, 15:53
Ответы с готовыми решениями:

Задача: сделать программу подсчета частоты появления каждого символ и Отсортировать по частоте появления
Прошу помочь не понимаю даже как начать делать. Суть задания, есть...

Получить из списка произвольных атомов список атомов, которые в исходном списке встречаются один раз
Построить список атомов, которые встречаются в заданном списке ровно один раз.

Clojure Добавление атомов в список после элемента с заданным свойством
Помогите сделать, желательно на homelisp.. Определить функцию, добавляющую атом/атомы в исходный список после атома, обладающего...

6
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
09.10.2014, 16:49
HomeLisp:

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
(defun mk-pair (lst)
  (cond ((null lst) nil)
        (t (let* ((a (car lst))
                  (lstr (remove a lst)))
           (cons (list a (- (length lst) (length lstr))) (mk-pair lstr)))))) 
 
(defun merge (lst)
  (let ((prev (car lst)) (r nil) )
    (iter (for curr in (cdr lst))
       (cond ((> (cadr curr) (car (last prev))) (collecting prev into r) (setq prev curr))
             (t (setq prev (cons (car curr) prev)) (setq curr nil))))
       (append r (list prev))))
 
(defun task (lst)
  (merge (qsort-a (mk-pair lst) 'cadr)))
 
(task '(a a a s s v v z a s v b))
 
==> ((z b 1) (s v 3) (a 4))
 
(task '(a s v v z a s v b))
 
==> ((z b 1) (a s 2) (v 3))
 
(task '(a s v b))
 
==> ((a s v b 1))
2
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
09.10.2014, 18:13
Lisp
1
2
3
4
5
6
7
8
9
10
(defun f (lst)
            (loop 
               with res for a in lst
               for c = (count a lst)
               do (let ((pos (position c res :key #'first)))
                    (if pos 
                        (setf (nth pos res)
                              (list c (pushnew a (second (nth pos res)))))
                        (push (list c (list a)) res)))
               finally (return (sort res #'< :key #'first))))
3
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
09.10.2014, 19:34
Clojure: не совсем по заданию, но все же:
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defn task [coll]
  (into (sorted-map)
        (apply group-by ((juxt identity keys) (frequencies coll)))))
;; => #'user/task
 
(task '(a a a s s v v z a s v b))
;; => {1 [z b], 3 [s v], 4 [a]}
(task '(a s v v z a s v b))
;; => {1 [z b], 2 [a s], 3 [v]}
(task '(a s v b))
;; => {1 [a s v b]}
3
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
09.10.2014, 19:38
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
;;; racket-lang.org
(define (make-duplicates lst)
  (if (null? lst)
      null
      (append (list (filter (lambda (i) (eq? i (car lst))) lst))
              (make-duplicates (remove* (list (car lst)) lst)))))
 
(define (foo lst)
  (let ((l (sort (make-duplicates lst) (lambda (i j) (< (length i) (length j))))))
    (let loop ((lst l) (acc null))
      (if (null? lst)
          acc
          (loop (filter (lambda (i) (not (eq? (length i) (length (car lst))))) lst)
                (append acc (list (map car (filter (lambda (i) (eq? (length i) (length (car lst)))) lst)))))))))
 
(foo '(a a s s s d d f f f f))
;'((a d) (s) (f))
2
0 / 0 / 0
Регистрация: 07.10.2014
Сообщений: 7
10.10.2014, 20:28  [ТС]
Catstail, transformator.t, smoke853, castorsky, Большое спасибо за помощь!
0
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
13.10.2014, 13:51
как вариант:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(defun sort-atoms-by-freq (w)
  (sort-atoms (sort (atom-freq w) #'< :key #'cadr)))
 
(defun atom-freq (w &aux (v (remove-duplicates w)))
  (mapcar #'(lambda (a) (list a (count a w))) v))
 
(defun sort-atoms (w &optional ac acc &aux (a (car w)) (d (cdr w)))
  (cond ((null w) (nreverse (cons (caar ac) acc)))
        ((or (null ac) (eq (cadar ac) (cadr a)))
         (sort-atoms d (cons a ac) acc))
        ((sort-atoms d (list a) (cons (if (cdr ac)
                                          (nreverse (mapcar #'car ac))
                                          (caar ac))
                                       acc)))))
 
> (sort-atoms-by-freq '(a a s s s d d f f f f))
((A D) S F)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.10.2014, 13:51
Помогаю со студенческими работами здесь

Clojure Описать функцию, которая находила бы сумму всех числовых атомов в списке, учитывая все атомы подсписков
Описать функцию, которая находила бы сумму всех числовых атомов в списке, учитывая все атомы подсписков.

Clojure Написать функцию, для замены элементов списка y на соответствующие элементы списка x в списке w
Здравствуйте. Помогите написать функцию, осуществляющую замену элементов списка y на соответствующие элементы списка x в списке w....

Clojure Создать два списка, поместив в первый отрицательные, а во второй – положительные элементы исходного списка
Помогите пожалуйста решить следующие задачи: 1. Задан список чисел. Создать два списка, поместив в первый отрицательные, а во второй –...

Формирование списка атомов
Добрый день!Помогите пожалуйста решить задачу на LISP. Написать программу формирования списка, состоящего из всех атомов, которые не...

Перестановка атомов списка
Здравствуйте! помогите пожалуйста написать функцию перестановки атомов верхнего уровня и нижнего уровня, учитывая промежуточное состояние...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru