Функционал (MAPLIST fn список) - Lisp

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

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

Нужно решить задачу. Определите функционал (MAPLIST fn список) для одного списочного аргумента.

Решение задачи: «Функционал (MAPLIST fn список)»

textual
Листинг программы
(define-syntax maplist
  (syntax-rules ()
    ((_ f x)
     (eval #'(if (list? x)
                 (if (null? x) '() (cons (apply f x) (maplist f (rest x))))
                 '())))
    ((_ ...) null)))
 
(maplist * '(1 2 3 4 5 6))
;'(720 720 360 120 30 6)
(maplist * 1 2 3 4 5 6)
'()

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

В коде определён синтаксис MAPLIST, который позволяет применять функцию к элементам списков. MAPLIST работает следующим образом:

  1. Рекурсивно вызывает себя для каждого элемента списка.
  2. Если элемент является списком, то рекурсивно обрабатывает его элементы.
  3. Если элемент является номером (числом), то передаёт его в функцию.
  4. Если элемент является пустым списком (null?), то возвращает пустой список.
  5. Если элемент не является списком, то вызывает ошибку. В данном примере используется функция умножения (*), которая применяется к элементам списка (1 2 3 4 5 6). Результатом работы программы будет список (720 720 360 120 30 6).

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


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

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

15   голосов , оценка 3.667 из 5
Похожие ответы