ЛИСП - Lisp (229418)

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

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

Описать функцию с использованием рекурсии, которая выдавала бы атомарный элемент списка по заданному номеру n, считая от начала. Например: для списка ’((2) (3) 4 5 а (e r) g) и n=3 результатом будет а.

Решение задачи: «ЛИСП»

textual
Листинг программы
(defun get-atom-by-num (lst n)
  (cond ((null lst) nil)
        ((and (= n 1) (atom (car lst))) (car lst))
        ((= n 1) (get-atom-by-num (cdr lst) 1))
        ((atom (car lst)) (get-atom-by-num (cdr lst) (- n 1)))
        (t (get-atom-by-num (cdr lst) n)))) 
 
==> get-atom-by-num
 
(get-atom-by-num '((2) (3) 4 5 а (e r) g) 3)
 
==> а

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

В данном коде определён функционал для получения атома из списка по его индексу. Индексация в лиспе отличается от привычной индексации в большинстве языков программирования. В лиспе индексация начинается с 0, а не с 1. Таким образом, чтобы получить доступ к атому по индексу 3 в списке '((2) (3) 4 5 а (e r) g), нужно вызвать функцию get-atom-by-num со списком и числом 3 в качестве аргументов. Функция вернёт атом а. Список вызовов функции get-atom-by-num можно представить следующим образом:

  1. (get-atom-by-num '((2) (3) 4 5 а (e r) g) 3) Аргументы:
    • '((2) (3) 4 5 а (e r) g) — список, содержащий атомы и функциональные головы.
    • 3 — число, которое определяет индекс атома, который необходимо получить. Результат:
    • а — атом, который находится в списке по указанному индексу. Код функции get-atom-by-num: (defun get-atom-by-num (lst n) (cond ((null lst) nil) ((and (= n 1) (atom (car lst))) (car lst)) ((= n 1) (get-atom-by-num (cdr lst) 1)) ((atom (car lst)) (get-atom-by-num (cdr lst) (- n 1))) (t (get-atom-by-num (cdr lst) n))))

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


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

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

9   голосов , оценка 4.444 из 5