Функция возвращает точечную пару элементами которой является: - Lisp

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

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

функция возвращает точечную пару элементами которой является: 1.) произведение всех положительных чисел произвольную списка. 2.) количество положительных чисел произвольную списка. пример: (2 -1 3 (3 -1)) -> (18.3)

Решение задачи: «Функция возвращает точечную пару элементами которой является:»

textual
Листинг программы
(defun task (lst)
  (reduce #'(lambda (acc x) (cond ((listp x) 
                                   (let* ((tmp (task x))
                                          (p (car tmp))
                                          (s (cdr tmp)))  
                                         (cons (* (car acc) p) (+ (cdr acc) s))))
                                  ((plusp x) (cons (* x (car acc)) (+ 1 (cdr acc))))
                                  (t acc))) lst :initial-value (cons 1 0)))
 
==> task
(task '(2 -1 3))
 
==> (6 . 2)
 
(task '(2 -1 3 (3 -1)))
 
==> (18 . 3)

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

В данном коде определена функция task, которая принимает в качестве аргумента список lst. Функция применяет рекурсивно к каждому элементу списка lst следующую логику:

  1. Если элемент является списком, то рекурсивно вызывается функция task для этого элемента, сохраняя результат в переменную tmp.
  2. Затем из tmp извлекаются два значения: p и s.
  3. Если элемент не является списком, то проверяется его тип с помощью функции plusp.
  4. Если элемент является числом, то выполняется операция умножения на car acc и прибавления единицы к cdr acc.
  5. Результатом работы функции task является список, состоящий из двух элементов — произведения и суммы, сохранённых в acc.
  6. Значение lst при инициализации функции task равно (cons 1 0).
  7. При первом вызове функции task для списка lst результат будет (6 . 2), так как car lst равен 2, а cdr lst равен 0.
  8. При втором вызове функции task для списка lst результат будет (18 . 3), так как car lst равен 2, cdr lst равен -1, следующий элемент списка имеет тип числа и приведённый к числу результат равен 3, а acc содержит 6 и 2.

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


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

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

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