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

Программа, возвращающую список вида: первый элемент — атом, появляющийся в списке один раз, второй - два раза и т.д

04.11.2017, 17:36. Показов 998. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста!!

Есть список атомов. Написать программу, возвращающую список вида:
первый элемент — атом исходного списка, появляющийся в списке один раз (с
учетом вхождений в подсписки), второй элемент — атом, появляющийся два
раза (с учетом вхождений в подсписки) и т.д. Если есть несколько атомов,
появляющихся одинаковое количество раз, то их объединить в список.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.11.2017, 17:36
Ответы с готовыми решениями:

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

Оставить в первом списке элементы, которые входят во второй список только один раз
Есть 2 списка. Оставить в первом только те элементы, которые есть во втором только в одном экземпляре.

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

2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38170 / 21105 / 4307
Регистрация: 12.02.2012
Сообщений: 34,697
Записей в блоге: 14
04.11.2017, 18:44
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
38
39
40
41
42
43
44
45
46
47
48
;; Сделать список одноуровневым
 
(defun flatten (lst)
  (cond ((null lst) nil)
        ((atom (car lst)) (cons (car lst) (flatten (cdr lst))))
        (t (append (flatten (car lst)) (flatten (cdr lst)))))) 
 
;; Строим список пар (атом число_вхождений)
 
(defun mkpair (lst)
  (cond ((null lst) nil)
        (t (let* ((a (car lst))
                  (c (remove a lst))
                  (n (- (length lst) (length c))))
            (cons (list a n) (mkpair c))))))
 
;; Сортировка по числу вхождений
 
(defun qsort (plist)
  (cond ((null plist) nil)
        (t (append (qsort (remove-if (lambda (z) (> (cadr z) (cadar plist))) (cdr plist))) 
                   (list (car plist))
                   (qsort (remove-if (lambda (z) (<= (cadr z) (cadar plist))) (cdr plist)))))))
 
;; Группировка
 
(defun group (plist &optional (n 0) (r nil))
  (cond ((null plist) (if (null (cdr r)) r (list r)))
        ((zerop n) (group (cdr plist) (cadar plist) (list (caar plist))))
        ((= (cadar plist) n) (group (cdr plist) n (cons (caar plist) r)))
        (t (if (null (cdr r))
               (cons (car r) (group (cdr plist) (cadar plist) (list (caar plist))))
               (cons r (group (cdr plist) (cadar plist) (list (caar plist))))))))
 
;; Решение задачи
 
(defun task (lst)
  (group (qsort (mkpair (flatten lst)))))
 
==> TASK
 
(task '(a b c (a ((b c) c) c) c))
 
==> ((A B) C)
 
(task '(z b c (a ((b c) c) c) c))
 
==> ((Z A) B C)
1
 Аватар для _sg
4708 / 4403 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
04.11.2017, 20:05
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(defun flatten (w) 
  (if (atom w) `(,w) (mapcan #'flatten w)))
 
(defun count-deep (w &aux (v (flatten w)))
  (loop for a in (remove-duplicates v)
        collect (list a (count a v))))
 
(defun sort-count (w)
  (sort (count-deep w) #'< :key #'cadr))
 
(defun glue (w &optional (b (cadar w)) ac &aux (a (car w)))
  (cond ((null w) ac)
        ((equal b (cadadr w)) (glue (cdr w) b (cons (car a) ac)))
        ((cons (if ac (reverse (cons (car a) ac)) (car a))
               (glue (cdr w) (caddr a) nil)))))
 
(defun glue-sort-count-deep (w)
  (glue (sort-count w)))
 
> (glue-sort-count-deep '(a b c (a ((b c) c) c) c))
((A B) C)
> (glue-sort-count-deep '(z b c (a ((b c) c) c) c))
((Z A) B C)
Добавлено через 27 минут
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(defun flatten (w) 
  (if (atom w) `(,w) (mapcan #'flatten w)))
 
(defun sort-count (w &aux (v (flatten w)))
  (sort (loop for a in (remove-duplicates v)
              collect `(,a ,(count a v)))
        #'< :key #'cadr))
 
(defun glue (w &optional (b (cadar w)) ac &aux (a (car w)))
  (cond ((null w) ac)
        ((equal b (cadadr w)) (glue (cdr w) b (cons (car a) ac)))
        ((cons (if ac (reverse (cons (car a) ac)) (car a))
               (glue (cdr w) (caddr a) nil)))))
 
(defun glue-sort-count-deep (w)
  (glue (sort-count w)))    
 
> (glue-sort-count-deep '(a b c (a ((b c) c) c) c))
((A B) C)
> (glue-sort-count-deep '(z b c (a ((b c) c) c) c))
((Z A) B C)
Добавлено через 2 минуты
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(defun flatten (w) 
  (if (atom w) `(,w) (mapcan #'flatten w)))
 
(defun sort-count (w &aux (v (flatten w)))
  (sort (loop for a in (remove-duplicates v)
              collect `(,a ,(count a v)))
        #'< :key #'cadr))
 
(defun glue (w &optional (b (cadar w)) ac)
  (cond ((null w) ac)
        ((equal b (cadadr w)) (glue (cdr w) b (cons (caar w) ac)))
        ((cons (if ac (reverse (cons (caar w) ac)) (caar w))
               (glue (cdr w) (caddar w) nil)))))
 
(defun glue-sort-count-deep (w)
  (glue (sort-count w)))  
 
> (glue-sort-count-deep '(a b c (a ((b c) c) c) c))
((A B) C)
> (glue-sort-count-deep '(z b c (a ((b c) c) c) c))
((Z A) B C)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.11.2017, 20:05
Помогаю со студенческими работами здесь

Определить первый атом в списке, а если такого в списке нет, вывести nil
Помогите с написанием функции на lisp. 1. Функция которая определяет первый атом в списке, а если такого в списке нет, выводит нил....

Есть два списка: один [a, b, c], другой [1, 2, 3]. Нужно вывести один список вида [a-1, b-2, c-3]
Помогите решить, пожалуйста. Есть два списка: один , другой . Нужно вывести один список вида

Написать функцию которая находит последний атом в списке c подсписка вида (a (b (c (.) d) e) f)
Написать функцию которая находит последний атом в списке из подсписка вида (a (b (c (...) d) e) f).

Конструктор вызывается один раз, а деструктор два раза
Программа для обработки исключений. Вообщем если ввести два числа и второе будет 0, то конструктор будет вызван 1 раз, а деструктор 2...

Программа не компилируется (не запускается) во второй раз (то есть только один раз)
почему у меня всего лишь один раз могу запустить программу через команду Run, когда хочу еще раз нажать Run не получается через средство...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru