Обработка списка - Lisp (229463)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Есть задание - написать fuнкцию, кoтoрая, выдает элeмeнт-список пo заданoму нoмeру n из задaннoгo списка, cчитaя его oт начала. Дано: ’((12) (3 0) 8 5 a (e t) g u) и n=3 результатом будет (e t) Прошу помощи, проходим рекурсивные функции, поэтому если есть возможность то лучше с использованием рекурсии.

Решение задачи: «Обработка списка»

textual
Листинг программы
(defun n-list (w n)
  (cond ((null w) nil)
        ((and (= n 1) (listp (car w))) (car w))
        ((listp (car w)) (n-list (cdr w) (1- n)))
        (t (n-list (cdr w) n))))
 
> (n-list '((12) (3 0) 8 5 a (e t) g u) 3)
(E T)
> (n-list '((12) (3 0) 8 5 a (e t) g u) 4)
NIL

Объяснение кода листинга программы

В коде определён функционал для обработки списков. При вызове функции n-list с двумя позиционными аргументами, первым из которых является список w, вторым — целое число n, возвращается либо первый элемент списка w, если n равно 1 и список является кучей (т.е. состоит только из одного элемента), либо рекурсивный вызов функции n-list с аргументами cdr w и (1- n) (где cdr w — это список, полученный путём удаления первого элемента из w, а (1- n) — это число, уменьшенное на единицу), если n больше 1 и первый элемент списка w является кучей. В случае, если n равно 0 или w равно nil, возвращается nil. Пример использования функции:

  1. > (n-list '((12) (3 0) 8 5 a (e t) g u) 3) Результат: (E T) Объяснение: При n=3 возвращается первый элемент списка w, так как (3 0) — это куча (т.е. список, состоящий только из одного элемента).
  2. > (n-list '((12) (3 0) 8 5 a (e t) g u) 4) Результат: NIL Объяснение: При n=4 и w не равном nil и не являющемся кучей, рекурсивный вызов функции n-list с аргументами (cdr w) и (1- n) происходит до тех пор, пока n не станет равным 0. В итоге возвращается nil.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5
Похожие ответы