1 / 1 / 0
Регистрация: 28.12.2014
Сообщений: 13
1

Выстроить атомы в многоуровневом списке в один уровень по возрастанию

10.01.2015, 16:02. Показов 2030. Ответов 7
Метки нет (Все метки)

Написать функцию in-one-level(x), которая выстраивает атомы в многоуровневом списке x в один уровень по возрастанию

У меня есть наброски, которые преобразует многоуровневый в одноуровневый, но вот с сортировкой по возрастанию у меня проблемка...
Lisp
1
2
3
4
5
6
7
(defun in-one-level (l) 
(cond 
    ((null l) nil)
    ((atom l) (list l))
    (t (append 
            (in-one-level (car l)) 
            (in-one-level (cdr l)) ))) )
Помогите, пожалуйста!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2015, 16:02
Ответы с готовыми решениями:

Атомы, встречающиеся в списке один раз
Всем привет! Нужно сформировать список из атомов, встречающихся в исходном один раз (учитывая...

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

Ссылка в многоуровневом списке
Попался вот такой скрипт, позволяющий создавать многоуровневые списки. Все хорошо, но есть одно но....

Поиск в многоуровневом списке
Добрый вечер! Помогите, пожалуйста, с идеей. У меня есть многоуровневый список такого вида: ...

7
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
10.01.2015, 17:05 2
syxomlinka, классики учат разбивать задачи на более мелкие задачи. В данном случае задачу можно разделить на две:
1. Функция, которая делает список "плоским", т.е. без уровней. Ищем flatten
2. Функция, которая сортирует список. Ищем sort (я где-то на форуме писал сортировку слиянием merge-sort или как-то так).
1
4684 / 4380 / 379
Регистрация: 12.05.2012
Сообщений: 3,087
10.01.2015, 17:53 3
как вариант:
Lisp
1
2
3
4
> (flatten '(7 ((3 5 (((4) 6 1) 0)) 2)))
(7 3 5 4 6 1 0 2)
> (sort-flatten '(7 ((3 5 (((4) 6 1) 0)) 2)))
(0 1 2 3 4 5 6 7)
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
33875 / 18902 / 3981
Регистрация: 12.02.2012
Сообщений: 31,692
Записей в блоге: 13
10.01.2015, 18:25 4
Цитата Сообщение от syxomlinka Посмотреть сообщение
выстраивает атомы
- наверное, все-таки - числа, а не атомы.
1
1 / 1 / 0
Регистрация: 28.12.2014
Сообщений: 13
10.01.2015, 18:28  [ТС] 5
ну тогда уж символы Потому что в списке могут быть не только цифры)
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
33875 / 18902 / 3981
Регистрация: 12.02.2012
Сообщений: 31,692
Записей в блоге: 13
10.01.2015, 18:33 6
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
28
29
30
31
32
33
34
35
36
;; Сортировка выбором
 
(defun vsort (lst)
  (cond ((null lst) nil)
        (t (let ((m (apply 'min lst)))
                 (cons m (vsort (removef m lst)))))))
 
==> vsort
 
(vsort '(1 2 3 1 2 3 4 -6))
 
==> (-6 1 1 2 2 3 3 4)
 
;; Уплощение списка (порядок нарушается, но потом все равно сортировка...)
 
(defun flat (lst)
  (let ((res nil))
    (dolist (i lst res)
      (if (atom i) (push i res) (setf res (append (flat i) res))))))
 
==> flat
 
(flat '((1 2) 11 (((5 6 ((7 9)) 3)))))
 
==> (3 9 7 6 5 11 2 1)
 
;; Решение
 
(defun task (lst)
  (vsort (flat lst)))
 
==> task
 
(task '((1 2) 11 (((5 6 ((7 9)) 3)))))
 
==> (1 2 3 5 6 7 9 11)
Добавлено через 35 секунд
syxomlinka, чем цифра отличается от числа?
3
4684 / 4380 / 379
Регистрация: 12.05.2012
Сообщений: 3,087
10.01.2015, 18:41 7
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun flatten (w &optional acc) 
  (cond ((null w) acc)
        ((atom w) (cons w acc))
        ((flatten (car w) (flatten (cdr w) acc)))))
 
(defun sort-flatten (w) (sort (flat w) #'<))
 
> (flatten '(7 ((3 5 (((4) 6 1) 0)) 2)))
(7 3 5 4 6 1 0 2)
> (sort-flatten '(7 ((3 5 (((4) 6 1) 0)) 2)))
(0 1 2 3 4 5 6 7)
Добавлено через 17 секунд
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun flatten (w)
  (loop for a in w 
        if (and a (atom a)) collect a
        else nconc (flat a)))
 
(defun sort-flatten (w) (sort (flat w) #'<))
 
> (flatten '(7 ((3 5 (((4) 6 1) 0)) 2)))
(7 3 5 4 6 1 0 2)
> (sort-flatten '(7 ((3 5 (((4) 6 1) 0)) 2)))
(0 1 2 3 4 5 6 7)
4
1046 / 940 / 107
Регистрация: 04.11.2012
Сообщений: 972
Записей в блоге: 3
10.01.2015, 19:19 8
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
;; Для списков и векторов. Сортировка с флагом.
(defun bubble (seq &optional (p #'<))
  (do ((len (1- (length seq)) (1- len))
       (flag T))
      ((eq flag nil))
    (setq flag nil)
    (do ((i 0 (1+ i)) x y)
        ((= i len))
      (setq x (elt seq i)
            y (elt seq (1+ i)))
        (when (not (funcall p x y))
          (rotatef (elt seq i) (elt seq (1+ i)))
          (setq flag T))))
    seq)
 
(bubble #(2 3 1 9 5 6 8 7 1 4))
; #(1 1 2 3 4 5 6 7 8 9)
(bubble '(2 3 1 9 5 6 8 7 1 4) #'>)
;  (9 8 7 6 5 4 3 2 1 1)
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2015, 19:19
Помогаю со студенческими работами здесь

Поиск элемента в многоуровневом списке
Помогите пожалуйста.Необходимо решить задачку - написать функцию предикатного типа....

Удаление в многоуровневом списке всех подсписков, содержащих одно и то же число
Доброго времени суток. Очень нужна Ваша помощь. Задание : удалить в многоуровневом списке все...

Выделение дочерних чекбоксов при клике на родительский (и наоборот) в многоуровневом списке
Как сделать выделение чекбоксов при клике на &quot;родительский&quot;? Список многоуровневный, оформлен с...

Clojure Повторяющиеся атомы в списке
Определите функцию, зависящую от двух аргументов u и n, которая по данному списку строит список...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru