Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Опишите функцию, выполняющую обработку 
:(
    Опции темы
julmak
Дата 28.10.2014, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.10.2014

Репутация: нет
Всего: нет



Дан список, содержащий атомы и списки. Каждый элемент-список содержит символьный атом и номера позиций на которых должен размещаться этот атом в списке-результате. Элементы-атомы размещаются в результате на позициях, не занятых при размещении атомов из элементов-списков. Если после размещения всех данных элементов в списке - результате остаются незанятые промежуточные позиции, то на этих позициях должен стоять(). К примеру:
((a 1 3 6) c (d 2 5)) представить в виде (a d a c d a).
PM MAIL   Вверх
_sg
Дата 28.10.2014, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 16.5.2007

Репутация: 2
Всего: 2



Код

(defun deploy-atoms (w &aux (v (remove-if #'atom w))
                     (z (remove-if-not #'atom w)))
  (deploy (sort (mapcan #'atom-num  v) #'< :key #'cadr) z))

(defun deploy (w v &optional (n 1)
               &aux (a (car w)) (d (cdr w)))
  (cond ((null w) nil)
        ((= (cadr a) n) (cons (car a) (deploy d v (1+ n))))
        (t (cons (car v) (deploy w (cdr v) (1+ n))))))

(defun atom-num (w &aux (a (car w))(d (cdr w)))
  (mapcar #'(lambda (e) `(,a ,e)) d))

> (deploy-atoms '((a 1 3 6) c (d 2 5)))
(A D A C D A)


Добавлено через 11 минут и 26 секунд
Код

(defun deploy-atoms (w)
  (deploy (sort (mapcan #'atom-num
                        (remove-if #'atom w))
                #'< :key #'cadr)
          (remove-if-not #'atom w)))

(defun deploy (w v &optional (n 1) &aux (a (car w)))
  (when w (if (= (cadr a) n)
              (cons (car a) (deploy (cdr w) v (1+ n)))
              (cons (car v) (deploy w (cdr v) (1+ n))))))

(defun atom-num (w &aux (a (car w)))
  (mapcar #'(lambda (e) `(,a ,e)) (cdr w)))

> (deploy-atoms '((a 1 3 6) (d 2 5)))
(A D A NIL D A)

--------------------
vk.com/ansicommonlisp
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.4379 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.