Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция для работы с подсписками 
:(
    Опции темы
Mars30
Дата 6.5.2014, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите решить задачку на Common lisp.
Написать функцию, которая возвращает подсписок данного списка, сумма числовых элементов которого максимальна
PM MAIL   Вверх
_sg
Дата 24.5.2014, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



подсписки возвращаются со всех уровней:
Код

(defun sublists (w &optional acc &aux (a (car w)) (d (cdr w)))
  (cond ((null w) acc)
        ((atom a) (sublists d acc))
        (t (sublists a (cons a (sublists d acc))))))

(defun sum-sublist (w)
  (mapcar #'(lambda (a)
              (list (reduce #'+ (remove-if-not #'numberp a)) a)) w))

(defun max-sum-sublists (w
                         &aux
                         (v (sum-sublist (sublists w)))
                         (m (reduce #'max v :key #'car)))
  (mapcar #'cadr (remove-if-not #'(lambda (a) (eq (car a) m)) v)))

> (max-sum-sublists '((a 3 4) (b 2 (c 3 4) 5) (d 7) ((e 7))))
((A 3 4) (C 3 4) (B 2 (C 3 4) 5) (D 7) (E 7))
> (max-sum-sublists '((a 3 4) (b 2 (c 3 4) 5) (d 7) ((e 8))))
((E 8))


Это сообщение отредактировал(а) _sg - 24.5.2014, 19:31
--------------------
vk.com/ansicommonlisp
PM MAIL   Вверх
_sg
Дата 24.5.2014, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



для верхнего уровня:
Код

(defun sum-sublist (w)
  (mapcar #'(lambda (a)
              (list (reduce #'+ (remove-if-not #'numberp a)) a)) w))
 
(defun max-sum-sublists (w
                         &aux
                         (v (sum-sublist w))
                         (m (reduce #'max v :key #'car)))
  (mapcar #'cadr (remove-if-not #'(lambda (a) (eq (car a) m)) v)))

> (max-sum-sublists '((a 3 4) (b 2 (c 3 4) 5) (d 7) ((e 7))))
((A 3 4) (B 2 (C 3 4) 5) (D 7))
> (max-sum-sublists '((a 3 4) (b 2 (c 3 4) 5) (d 8) ((e 7))))
((D 8))
> (max-sum-sublists '((a 3 4) (b 2 (c 3 4) 5) (d 8) ((e 8))))
((D 8))

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

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

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


 




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


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

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