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

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

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

Нужно вручную написать функцию last, и вот эти 2 списка из согласных нужно положить в локальную переменную, помоги пожалуйста
Листинг программы
  1. (defun ending (w)
  2. (cond ((and (member (car (last w 2))
  3. '( b c d f g h j k l m n p q r s t v w x y z))
  4. (eql (car (last w)) 'y))
  5. (our-nconc (butlast w) '(i e s)))
  6. ((and (member (car (last w 2))
  7. '( b c d f g h j k l m n p q r s t v w x y z))
  8. (eql (car (last w)) 'o))
  9. (our-nconc w '(e s)))
  10. (t (our-nconc w '(s)))))
  11.  
  12. (defun our-nconc (x y)
  13. (cond ((null x) y)
  14. (t (cons (car x) (our-nconc (cdr x) y)))))

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

textual
Листинг программы
  1. (defun our-last (lst &optional (n 1)) ; объявление ф-ии our-last c обязательным парметром lst, и
  2.                                       ; необязательным парметром n (по умолчанию равен 1)
  3.  
  4.   (let* ((len (length lst)) ; объявление локальных переменных: len - длина заданного списка lst, и
  5.          (delta (- len n))) ; delta - сколько элементов списка lst нужно пропустить, чтобы
  6.                             ; вернуть оставшиеся элементы списка
  7.  
  8.     (if (< delta 0) ; если n больше чем элементов в списке len, то delta будет отрицательным.
  9.         lst         ; в этом случае возвращается список целиком (согласно справочнику)
  10.         (nthcdr delta lst)))) ; в противном случае вернуть указатель на оставшиеся элементы списка
  11.  
  12. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут