Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка n-ых элементов из списка списков 
:(
    Опции темы
nikitaDalek
  Дата 1.10.2013, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, уважаемые!
Я только начал изучать Lisp, и все дается с огромным трудом.
Пытаюсь решить задачу: "L – список простых списков. Возвратить список из N-ых элементов.", но не получается.
Выстрадал следующий код:
Код

(defun nElOfLists(ls n)
        (if (> n 0)
            (append  (nth n (car ls)) (nElOfLists (cdr ls) n) )
        )
)

Прошу подтолкнуть в нужном направлении, понимаю, данный код ужасен и неправилен.
PM MAIL   Вверх
Stolzen
Дата 1.10.2013, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



сначала напишите функцию, которая возвращает n-й элемент из обычного списка, потом сделаете map этой функции на список списков 
Т.е. что-то типа (map (lambda (xs) (nth n xs)) ls) 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Catstail
Дата 7.10.2013, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть функция nth, которая принимает два параметра: номер элемента n и список L. Она возвращает n-й элемент заданного списка L. Элементы нумеруются с нуля. Поэтому, самое правильное - использовать отображающий функционал mapcar:

Код

(defun subl (n lst)
  (mapcar #'(lambda (x) (nth n x)) lst))

==> subl
(subl 1 '((1 2 3) (11 22 33) (111 222 333)))

==> (2 22 222)
(subl 2 '((1 2 3) (11 22 33) (111 222 333)))

==> (3 33 333)


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

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

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


 




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


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

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