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

Сгруппировать все элементы в подсписках до конца попарно

11.12.2013, 20:58. Показов 1642. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Используя рекурсию в Common Lisp делать следующие преобразования: получая в качестве исходного любой многоуровневый список вида
(a b ((c d e) f g (h i)) j k),
создать результирующий список вида
((a b) (c d) (e f) (g h) (i j)),
то есть сгруппировать все элементы в подсписках до конца попарно
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.12.2013, 20:58
Ответы с готовыми решениями:

Сколько всего комиссий, в которых все министры попарно дружат или все попарно враждуют
Правительство состоит из 25 министров. Каждые два министра либо дружат, либо враждуют. При этом каждый министр дружит ровно с 6 другими....

Сгруппировать точки из файла попарно по принципу наименьшего расстояния
Есть файл, в котором заданные координаты точек на плоскости. Написать программу, которая группирует точки из этого файла попарно по...

Переписать попарно все элементы массива А и В
Помогите написать программку. Предусловие задания: Задание: HelpMePlease:black_eye.:

9
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
11.12.2013, 21:02
Вспомогательная функция, "уничтожающая" скобки:

Lisp
1
2
3
4
5
6
7
8
9
10
(defun mkline (lst)
  (cond ((null lst) nil)
        ((atom (car lst)) (cons (car lst) (mkline (cdr lst))))
        (t (append (mkline (car lst)) (mkline (cdr lst))))))
 
==> mkline
 
(mkline '(a b ((c d e) f g (h i)) j k))
 
==> (a b c d e f g h i j k)
Вторая функция строит пары:

Lisp
1
2
3
4
5
6
7
8
9
10
(defun mkpair (lst)
  (cond ((null lst) nil)
        ((null (cdr lst)) (list (list (car lst))))
        (t (append (list (list (car lst) (cadr lst))) (mkpair (cddr lst))))))
 
==> mkpair
 
(mkpair '(a b c d e))
 
==> ((a b) (c d) (e))
Ну, и решение:

Lisp
1
2
3
4
5
6
7
8
(defun task (lst)
  (mkpair (mkline lst)))
 
==> task
 
(task '(a b ((c d e) f g (h i)) j k))
 
==> ((a b) (c d) (e f) (g h) (i j) (k))
2
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
11.12.2013, 22:04
Лучший ответ Сообщение было отмечено как решение

Решение

Lisp
1
2
3
4
5
6
7
8
9
10
(defun pf (list)
           (let ((test (every 'atom list)))
             (if test (loop 
                         for a in list by #'cddr
                         for b in (cdr list) by #'cddr
                         collect (list a b))
                 (pf (mapcan 
                      #'(lambda (x)
                          (if (listp x) x (list x)))
                      list)))))
3
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
12.12.2013, 00:06
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun flat (w &optional ac) 
  (cond ((null w) ac)
        ((atom w) (cons w ac))
        ((flat (car w) (flat (cdr w) ac)))))
 
(defun pair (w)
  (if (cdr w)
      (cons (list (car w) (cadr w))
            (pair (cddr w)))
      (when w (list w))))
 
(defun flat-pair (w)
  (pair (flat w)))
 
> (flat-pair '(a b ((c d e) f g (h i)) j k))
((A B) (C D) (E F) (G H) (I J) (K))
> (flat-pair '(a b ((c d e) f g (h i)) j k l))
((A B) (C D) (E F) (G H) (I J) (K L))
3
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
17.12.2013, 22:45
Цитата Сообщение от Catstail Посмотреть сообщение
Вспомогательная функция, "уничтожающая" скобки:
Lisp
1
2
3
4
(defun f (l)
           (if (listp l)
               (loop for a in l append (f a))
               (list l)))
Добавлено через 10 минут
Цитата Сообщение от Catstail Посмотреть сообщение
Вторая функция строит пары:
Lisp
1
2
3
(defun f (l)
           (loop for (a . s) on l by #'cddr
              collect (list a (first s))))
2
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
19.11.2014, 21:41
как вариант:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun flat (w)
  (loop for a in w 
        if (and a (atom a)) collect a
        else nconc (flat a)))
 
(defun pair (w)
  (if (cdr w)
      (cons (list (car w) (cadr w))
            (pair (cddr w)))
      (when w (list w))))
 
(defun flat-pair (w)
  (pair (flat w)))
 
> (flat-pair '(a b ((c d e) f g (h i)) j k))
((A B) (C D) (E F) (G H) (I J) (K))
> (flat-pair '(a b ((c d e) f g (h i)) j k l))
((A B) (C D) (E F) (G H) (I J) (K L))
3
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
19.11.2014, 22:02
Новый флаттен. Хотел уже сказать да здравствует, но вот первый тест...
Цитата Сообщение от _sg Посмотреть сообщение
Lisp
1
2
3
4
(defun flat (w)
  (loop for a in w 
        if (and a (atom a)) collect a
        else nconc (flat a)))
Lisp
1
2
> (flat '(a b nil ((c d e) f g (h i)) j k))
(A B C D E F G H I J K)
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
19.11.2014, 22:16
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun task (lst)
  (let ((tmp (flatten lst))
        (r nil)) 
       (iter (for b upfrom 0)
        (collecting (if (null (cdr tmp)) tmp (subseq tmp 0 2)) into r)
        (setq tmp (cddr tmp))
        (when (null tmp) (return r))))) 
 
==> task
 
(task '(1 2 3 (1 2 3) (((4 5 6)))))
 
==> ((1 2) (3 1) (2 3) (4 5) (6))
Добавлено через 3 минуты
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun new-flatten (lst)
  (let ((r nil))
    (iter (for i in lst) 
      (if (atom i) (collecting i into r)
                   (setq r (append r (new-flatten i)))))))
 
==> new-flatten
 
(new-flatten '(a (n b) nil (nil)))
 
==> (a n b NIL NIL)
2
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
19.11.2014, 22:27
Lambdik, nil - пустой список:
Lisp
1
2
3
4
5
6
7
(defun flat (w &optional ac) 
  (cond ((null w) ac)
        ((atom w) (cons w ac))
        ((flat (car w) (flat (cdr w) ac)))))
 
> (flat '(a b nil ((c d e) f g (h i)) j k))
(A B C D E F G H I J K)
Добавлено через 1 минуту
Lisp
1
2
3
4
5
6
7
(defun flat (w)
  (loop for a in w 
        if (and a (atom a)) collect a
        else nconc (flat a)))
 
> (flat '(a b nil ((c d e) f g (h i)) j k))
(A B C D E F G H I J K)
2
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
20.11.2014, 01:36
Цитата Сообщение от aaaa4444 Посмотреть сообщение
многоуровневый список вида
(a b ((c d e) f g (h i)) j k),
создать результирующий список вида
((a b) (c d) (e f) (g h) (i j)),
то есть сгруппировать все элементы в подсписках до конца попарно
атом 'k в преобразовании потерян.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
;; racket-lang.org
(define (foo lst)
  (let loop ([lst lst] [acc null])
    (cond [(empty? lst) acc]
          [(list? lst) (loop (car lst) (loop (cdr lst) acc))]
          [else (cond [(empty? acc) (cons (list lst) acc)]
                      [(= (length (car acc)) 1)
                       (cons (cons lst (car acc))
                             (cdr acc))]
                      [(cons (list lst) acc)])])))
 
(foo '(a b ((c d e) f g (h i)) j k))
;'((a) (b c) (d e) (f g) (h i) (j k))
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.11.2014, 01:36
Помогаю со студенческими работами здесь

Перебор содержимого LIST<>: попарно сравнить все элементы листа исключая возможность повторения
Задача такова. В листе хранятся адреса файлов, есть отдельный метод сравнения этих файлов. Необходимо попарно сравнить все элементы листа...

В заданном массиве A(N) все элементы которого попарно различны, найти наименьший элемент из положительных
В заданном массиве A(N) все элементы которого попарно различны, найти наименьший элемент из положительных

В заданном массиве A(N), все элементы которого попарно различны, найти: наименьший элемент из положительных
В заданном массиве A(N), все элементы которого попарно различны, найти: наименьший элемент из положительных

Перемножить попарно элементы строки, в которой расположен максимум матрицы, на элементы столбца
В данной матрице найти наибольший элемент и перемножить попарно элементы строки , в которой он расположен , на элемент столбца в котором он...

В заданной матрице найти наибольший элемент и попарно перемножить элементы строки на элементы столбца
В данной квадратной матрице найти наибольший элемент и попарно перемножить элементы строки, в котором он расположен, на элементы столбца, в...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Реалии
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