Используя функции car и cdr необходимо извлечь из заданных списков элементы с указанными номерами - Lisp
Формулировка задачи:
Добрый день!
Помогите пожалуйста решить задачу:
Используя функции car и cdr необходимо извлечь из заданных списков эле-
менты с указанными номерами. В качестве результата выдайте список состав-
ленный из извлеченных элементов.
Списки:
Номера: 2, 3, 3.
Листинг программы
- (9 (() 8 88 888))
- (H (J K L) (U J N))
- (C B (N M I) (T Y U))
Решение задачи: «Используя функции car и cdr необходимо извлечь из заданных списков элементы с указанными номерами»
textual
Листинг программы
- ;; racket-lang.org
- (define (foo n lst)
- (if (> n 1)
- `(car
- ,(let loop ((n (sub1 n)))
- (if (= n 1)
- `(cdr ,lst)
- `(cdr ,(loop (sub1 n))))))
- `(car ,lst)))
- (let ((data '((9 (() 8 88 888))
- (H (J K L) (UJN))
- (C B (N M I) (T Y U))))
- (nums '(2 3 3)))
- (map (lambda (x y) (foo x y)) nums data))
- #|
- '((car (cdr (9 (() 8 88 888))))
- (car (cdr (cdr (H (J K L) (UJN)))))
- (car (cdr (cdr (C B (N M I) (T Y U))))))
- |#
Объяснение кода листинга программы
В коде определена функция foo
, которая принимает два аргумента: число n
и список lst
. Если n
больше 1, то функция применяет рекурсию, извлекая указанный элемент из списка с помощью car
и cdr
. Если n
равно 1, то функция извлекает последний элемент списка с помощью cdr
.
Затем определена функция let
, которая создает переменные data
и nums
и инициализирует их значениями соответствующих списков.
Далее, с помощью функции map
происходит применение функции foo
к каждому элементу списка nums
и списку data
. Результат выводится в консоль.
(foo 2 (9 (() 8 88 888)))
(foo 3 (H (J K L) (UJN)))
(foo 3 (C B (N M I) (T Y U)))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д