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

Рекурсивное превращение списков

13.12.2012, 21:46. Показов 1061. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Используя прием рекурсии в Лиспе, выполнить следующие преобразования:
получая, в качестве исходного, любой многоуровневый список вида:
(a b c (d (e f (g h i j (k (nil) 1 2) 3) 4) 5 6) 7 8 9 10)
создать результирующий список вида
(7 8 9 10 (d(4(g h i j (1 2 (nil) k) 3) e f) 5 6) a b c),
то есть, в каждом непарном уровне все элементы, которые стоят впереди единого подсписка данного уровня, переместить (не меняя порядка их следования) за подсписок, а те, которые стоят после подсписка, - аналогичным образом переместить в позиции предшествующих подсписков. Парные уровни списка остаются в неизменном виде.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.12.2012, 21:46
Ответы с готовыми решениями:

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

Рекурсивное преобразования списков
Используя приемы рекурсии в Лиспе, выполнить следующие преобразования: Получая, в качестве исходного, любой одноуровневый список вида (1 2...

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

8
Заблокирован
13.12.2012, 22:08
обсуждалось тут
1
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 88
14.12.2012, 00:46  [ТС]
там не такое)
0
Заблокирован
14.12.2012, 01:54
ну а что мешает пошевелить мозгами хоть чуть чуть? Смотрю привыкли ко всему готовому. Неужели так трудно дописать флаг перестановки и продумать ее алгоритм?
Вот вариант для автолисп,
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
(defun tree_mirror (tree)
  ((lambda (frec)
     (frec tree nil)
   )
    (lambda (tree revp)
      (if tree
    (if (listp (car tree))
      (cons (frec (car tree) (not revp))
        (frec (cdr tree) (not revp))
      )
      (if revp
        ((lambda (lst)
           ((lambda (x)
          (append
            (cdr (member (car x) lst))
            x
            (reverse (cdr (member (car x) (reverse lst))))
          )
        )
         (vl-remove-if 'atom lst)
           )
         )
          tree
        )
        tree
      )
    )
      )
    )
  )
)
1
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 88
14.12.2012, 10:07  [ТС]
Ну... Времени мало. Спасибо огромное!
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,724
Записей в блоге: 14
14.12.2012, 11:21
Непонятная постановка задачи...
1) что такое "непарный уровень"?
2) что такое "единый подсписок"?
1
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 88
18.12.2012, 00:14  [ТС]
А можете как-то поподробней объяснить что происходит в коде, ато у меня голова закипает...

Добавлено через 9 минут
непарный уровень - это 1, 3, 5 и т.д. уровни подсписка, (<1 ур> (<2 ур> (<3 ур>(<4 ур>)<3 ур>) <2 ур>)<1 ур>). В примере <4 ур> - единый подсписок, который не имеет наследников. Как то так
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,724
Записей в блоге: 14
18.12.2012, 10:18
Вот:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun swap-list (lst)
  (let ((beg nil)
        (mid nil)
        (tail nil)
        (flg nil)) 
    (cond  ((Equal lst (list nil)) (list nil))
             (t (dolist (i lst (append beg (list (swap-list mid)) tail))
                  (when (and (not flg) (atom i)) (setq tail (cons i tail)))
                  (when (and i (listp i)) (setq mid i) (setq flg t))
                  (when (and flg (atom i)) (setq beg (append beg (list i)))))))))
           
==> swap-list
 
(swap-list '(a b c( d (e f ( g h i j ( k ( nil ) 1 2 ) 3 ) 4 ) 5 6 ) 7 8 9 10))
 
==> (7 8 9 10 (5 6 (4 (3 (1 2 (NIL) k) j i h g) f e) d) c b a)
Добавлено через 9 часов 39 минут
Цитата Сообщение от Catstail Посмотреть сообщение
"непарный уровень"
- из контекста я понял, что некоторые участники называют чётные числа (это числа, кратные двум) - парными. Русский язык меняется на глазах...
1
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 88
18.12.2012, 14:09  [ТС]
Извиняйте, я хохол
(d) с (5 6), (g h i j) с (3) - не должны менятся, они на четном уровне и порядок элементов в подсписке не должен менятся.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.12.2012, 14:09
Помогаю со студенческими работами здесь

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

Рекурсивное и не рекурсивное вычисление НОД
Здравствуйте! Имеется код вычисления НОД. Как сделать его рекурсивным и НЕ рекурсивным, и в чём отличие рекурсивного вычисления от...

Как сложить сумму из чисел сотен списков и узнать количество списков?
Доброго времени суток! Не могу понять как сложить сумму из несколько тысяч списков. Подскажите пожалуйста? В коде удалил из списков все...

Объединение 2 и более списков в список списков по индексу без использования циклов
Уважаемые товарищи, подскажите есть ли способ объединения 2 и более списков в список списков по индексу без использования циклов. К примеру...

Копирование данных двумерного массива состоящего из списков в список списков.
Для нахождения МСТ (минимального остового дерева) написал функцию, которая принимает масив - гарф. private List&lt;Point&gt;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru