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

Подсчет чисел и строк в каждом подсписке оригинального списка и вывод их отдельным списком

23.01.2020, 01:35. Показов 1016. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Прошу помочь с решением задачи на Common Lisp на рекурсию.

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

Пример:
Список на вход: (25 ("a" 17 a ("b" "c" 8)) 20 d "d")
Список на выходе: (((1 2) 2 3) 4 4)

Т.е., в наименьшем подсписке 1 число и 2 строки. В подсписке, в который он входит, 2 числа и 3 строки. В основном списке в сумме 4 числа и 4 строки.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.01.2020, 01:35
Ответы с готовыми решениями:

Фильтрация списка с отдельным списком "содержит"
Ситуация нужно отфильтровать (и в будущем постоянно это делать, заменяя основной список) квартир на продажу. Т.к. там много агентств, нужно...

Подсчёт суммы всех числовых элементов на каждом уровне списка
Есть код который считает сумму чисел на каждом уровне списка (defun qq(lst1 &optional (lvl 1)(cntr 0)) (cond ((null lst1)...

Вывод строки чисел без пробелов, а затем вывод значения в виде списка чисел
Определить функцию (Z1 k n), где k<n, которая сначала выводит строку чисел без пробелов k k+1 k+2 ... n, а затем на другой строке...

5
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,696
Записей в блоге: 14
23.01.2020, 17:33
Цитата Сообщение от WDe Посмотреть сообщение
Список на вход: (25 ("a" 17 a ("b" "c" 8)) 20 d "d")
Список на выходе: (((1 2) 2 3) 4 4)
- смотрим внимательно: в списке на верхнем уровне 2 числа (25 и 20) и одна строка "d", поэтом ответ должен выглядеть так: (2 1 (... остальное ...)) Согласен?

Добавлено через 8 минут
Lisp
1
2
3
4
5
6
7
8
9
10
(defun task (list)
   (let ((ns (count-if 'numberp list))
         (ss (count-if 'stringp list))
         (ls (mapcar 'task (remove-if-not 'listp list))))
    (append (list ns ss) ls)))
 
==> TASK
 
(task '(25 ("a" 17 a ("b" "c" 8)) 20 d "d"))
==> (2 1 (1 1 (1 2)))
1
0 / 0 / 0
Регистрация: 23.01.2020
Сообщений: 2
23.01.2020, 18:16  [ТС]
Спасибо, но я не совсем согласен. Для каждого списка, в котором есть подсписки, желательно считать единым счетчиком числа и в самом списке, и в его подсписках. Т.е. на верхнем уровне в идеале будет все-таки 4, и т.д.
0
Заблокирован
23.01.2020, 18:25
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(define (lst? lst)
  (if (empty? lst)
      lst
      (if (list? (car lst))
          (car lst) 
          (lst? (rest lst)))))
 
(define (ready lst)
  (if (empty? lst)
      lst
      (if (lst? lst)
          (list (length (filter number? lst)) (ready (lst? lst)))
          (ready (rest lst)))))
 
 
(ready '(20 3 (b 40 c 100 (w z 80)) 2 4 u))
 
=> '(4 (2 (1 ())))
тока чисел. но легко исправить
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,696
Записей в блоге: 14
23.01.2020, 19:04
Цитата Сообщение от WDe Посмотреть сообщение
Спасибо, но я не совсем согласен.
- тогда сам!
0
Заблокирован
23.01.2020, 21:34
Цитата Сообщение от WDe Посмотреть сообщение
Спасибо, но я не совсем согласен. Для каждого списка, в котором есть подсписки, желательно считать единым счетчиком числа и в самом списке, и в его подсписках. Т.е. на верхнем уровне в идеале будет все-таки 4, и т.д.
А чё в примере тогда по-другому?

Добавлено через 1 час 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
(define (nums lst)
  (list (length (filter number? lst))))
(define (syms lst)
  (list (length (filter symbol? lst))))
 
(define (lst? lst)
  (if (empty? lst)
      lst
      (if (list? (car lst))
          (car lst) 
          (lst? (rest lst)))))
 
(define (ready lst)
  (if (empty? lst)
      lst
      (if (lst? lst)
          (append (list (apply +  (nums (flatten lst))) (apply + (syms (flatten lst)))) (list (ready (lst? lst))))
          (ready (rest lst)))))
 
 
(ready '(20 3 (b 40 c 100 (w z 80)) 2 4 u))
 
=> '(7 5 (3 4 (1 2 ())))
Добавлено через 35 минут
Даже можно так сделать, если вам хочется.



Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(define (data lst)
  (vector (length (filter number? lst)) (length (filter symbol? lst))))
 
 
(define (ready lst)
  (if (empty? lst)
      lst
      (if (lst? lst)
          (append (list "All together in the list: " (vector (nums (flatten lst)) (syms (flatten lst))) "In the current list" (data lst))  (list (ready (lst? lst))))
          (ready (rest lst)))))
 
 
(pretty-print (ready '(20 3 (b 40 c 100 (w z 80)) 2 4 u)))
 
'("All together in the list: "
  #(7 5)
  "In the current list"
  #(4 1)
  ("All together in the list: "
   #(3 4)
   "In the current list"
   #(2 2)
   ("All together in the list: " #(1 2) "In the current list" #(1 2) ())))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.01.2020, 21:34
Помогаю со студенческими работами здесь

Подсчет количества положительных чисел в списке и формирование списка с номерами позиций этих чисел
Подсчитайте количество положительных чисел в списке и сформируйте список с номерами позиций этих чисел.

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

Ошибка кодировки при выводе оригинального и отсортированного списка
Здравствуйте, уважаемые форумчане! Не могу понять, почему трабла с кодировкой? При выводе оригинального и отсортированного списка...

Подсчёт и вывод строк
Помогите сосчитать количество, и вывести записи в таблицу. Пыытаюсь сделать так чтобы в таблицу выводилась все наименование, в...

Подсчёт и вывод строк
Здравствуйте. Скажите как реализовать вывод информации в Word с A1 по строку которая заполнена последняя. Знаю что последнюю строчку...


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

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