Используя функции car и cdr необходимо извлечь из заданных списков элементы с указанными номерами - Lisp

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

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

Добрый день! Помогите пожалуйста решить задачу: Используя функции car и cdr необходимо извлечь из заданных списков эле- менты с указанными номерами. В качестве результата выдайте список состав- ленный из извлеченных элементов. Списки:
Листинг программы
  1. (9 (() 8 88 888))
  2. (H (J K L) (U J N))
  3. (C B (N M I) (T Y U))
Номера: 2, 3, 3.

Решение задачи: «Используя функции car и cdr необходимо извлечь из заданных списков элементы с указанными номерами»

textual
Листинг программы
  1. ;; racket-lang.org
  2. (define (foo n lst)
  3.   (if (> n 1)
  4.       `(car
  5.         ,(let loop ((n (sub1 n)))
  6.            (if (= n 1)
  7.                `(cdr ,lst)
  8.                `(cdr ,(loop (sub1 n))))))
  9.       `(car ,lst)))
  10.  
  11. (let ((data '((9 (() 8 88 888))
  12.               (H (J K L) (UJN))
  13.               (C B (N M I) (T Y U))))
  14.       (nums '(2 3 3)))
  15.   (map (lambda (x y) (foo x y)) nums data))
  16. #|
  17. '((car (cdr (9 (() 8 88 888))))
  18.   (car (cdr (cdr (H (J K L) (UJN)))))
  19.   (car (cdr (cdr (C B (N M I) (T Y U))))))
  20. |#

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

В коде определена функция foo, которая принимает два аргумента: число n и список lst. Если n больше 1, то функция применяет рекурсию, извлекая указанный элемент из списка с помощью car и cdr. Если n равно 1, то функция извлекает последний элемент списка с помощью cdr. Затем определена функция let, которая создает переменные data и nums и инициализирует их значениями соответствующих списков. Далее, с помощью функции map происходит применение функции foo к каждому элементу списка nums и списку data. Результат выводится в консоль.

  1. (foo 2 (9 (() 8 88 888)))
  2. (foo 3 (H (J K L) (UJN)))
  3. (foo 3 (C B (N M I) (T Y U)))

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


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

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

11   голосов , оценка 3.818 из 5

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

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

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