Функция mapcar - Lisp

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

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

Почему при вычислении данного выражения выводится ответ (10 10 10), а не (30 20 10)? Играет ли тут какую-то роль функция маpcar?
(mapcar (lambda (r) (/(car(cdr (cdr r))))10)  
'((1 Ivanov 300 1) 
(2 Petrov 200 1) 
(3 Sidorov 100 2)))

Решение задачи: «Функция mapcar»

textual
Листинг программы
(mapcar (lambda (r) (/ (car (cdr (cdr r))) 10)) '((1 Ivanov 300 1) (2 Petrov 200 1) (3 Sidorov 100 2)))
 
==> (30 20 10)
 
;; или так:
 
(mapcar (lambda (r) (/ (caddr r) 10)) '((1 Ivanov 300 1) (2 Petrov 200 1) (3 Sidorov 100 2)))
 
==> (30 20 10)

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

Код представляет собой реализацию функции mapcar на языке Lisp. Функция mapcar принимает два аргумента: функцию и список. Она применяет функцию к каждому элементу списка и собирает результаты в новый список. В данном случае функция mapcar применяется к списку ((1 Ivanov 300 1) (2 Petrov 200 1) (3 Sidorov 100 2)). Функция, которую передают в mapcar, это lambda (r) (/ (car (cdr (cdr r))) 10). В данном случае она извлекает третий элемент из каждого элемента списка, используя car и cdr, и затем делит его на 10. Результатом выполнения функции mapcar будет новый список, содержащий результаты применения функции ко всем элементам исходного списка. В данном случае результатом будет (30 20 10), так как каждый третий элемент исходного списка был разделен на 10. Второй вариант кода отличается только использованием caddr вместо car и cdr. Это связано с тем, что caddr является более коротким и удобным способом доступа к третьему элементу списка.

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


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

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

12   голосов , оценка 3.833 из 5