Реализация функции last - Lisp

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

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

Нужно вручную написать функцию last, и вот эти 2 списка из согласных нужно положить в локальную переменную, помоги пожалуйста
(defun ending (w)
  (cond ((and (member (car (last w 2))
                      '( b c d f g h j k l m n p q r s t v w x y z))
              (eql (car (last w)) 'y))
         (our-nconc (butlast w) '(i e s)))
        ((and (member (car (last w 2))
                      '( b c d f g h j k l m n p q r s t v w x y z))
              (eql (car (last w)) 'o))
         (our-nconc w '(e s)))
        (t (our-nconc w '(s)))))

(defun our-nconc (x y)
       (cond ((null x) y)
             (t (cons (car x) (our-nconc (cdr x) y)))))

Решение задачи: «Реализация функции last»

textual
Листинг программы
(defun our-last (lst &optional (n 1)) ; объявление ф-ии our-last c обязательным парметром lst, и
                                      ; необязательным парметром n (по умолчанию равен 1)
 
  (let* ((len (length lst)) ; объявление локальных переменных: len - длина заданного списка lst, и
         (delta (- len n))) ; delta - сколько элементов списка lst нужно пропустить, чтобы
                            ; вернуть оставшиеся элементы списка
 
    (if (< delta 0) ; если n больше чем элементов в списке len, то delta будет отрицательным.
        lst         ; в этом случае возвращается список целиком (согласно справочнику)
        (nthcdr delta lst)))) ; в противном случае вернуть указатель на оставшиеся элементы списка
 
let* (let со звездочкой) потому, что вычисление delta зависит от len.

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

В данном коде реализована функция our-last, которая принимает два параметра: lst и n.

  1. (defun our-last (lst &optional (n 1)) — объявление функции our-last с обязательным аргументом lst и необязательным аргументом n, значение которого по умолчанию равно 1.
  2. (let* ((len (length lst)) — создание локальной переменной len, которая содержит длину списка lst.
  3. (delta (- len n)) — создание локальной переменной delta, которая содержит разницу между длиной списка lst и значением аргумента n. Если n больше, чем количество элементов в списке lst, то delta будет отрицательной.
  4. (if (< delta 0) — проверка условия: если delta меньше нуля, то это означает, что значение аргумента n больше, чем количество элементов в списке lst.
  5. lst — возврат списка целиком в случае, если условие в предыдущем шаге истинно.
  6. (nthcdr delta lst) — возврат указателя на оставшиеся элементы списка, начиная с позиции, следующей за последней позицией, соответствующей аргументу n. Таким образом, если передать функции our-last список из 5 элементов и аргумент n, равный 3, то функция вернет список, содержащий только два элемента: четвертый и пятый элементы исходного списка.

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


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

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

12   голосов , оценка 3.833 из 5