Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > Выборка n-ых элементов из списка списков


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

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

Прошу подтолкнуть в нужном направлении, понимаю, данный код ужасен и неправилен.

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

Автор: Catstail 7.10.2013, 19:12
Есть функция 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)


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)