ЛИСП - 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 можно представить следующим образом:
- (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))))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д