Найти произведение элементов списка - Lisp

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

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

Необходимо найти произведение элементов в списке, имеющем вид: ((х (х)) (х (х)) (х (х)) ...) На данный момент имеется такой код, которые не выводит нужное значение:
Листинг программы
  1. (display "Редукция: ")
  2. (define n 1)
  3. (define (sp1 x f)
  4. (if (null? x)
  5. n
  6. (and (f (car (car x))) (f (car (car (cdr (car x))))) (sp1 (cdr x) f))
  7. )
  8. )
  9. (sp1 '((1 (2)) (3 (4)) (5 (6))) (lambda (x) (* x n)))
Подскажите, пожалуйста, как исправить

Решение задачи: «Найти произведение элементов списка»

textual
Листинг программы
  1. (defun product-deep (w) (reduce #'*(flatten w)))
  2.  
  3. (defun flatten (w)
  4.   (loop for a in w
  5.         if (and a (atom a)) collect a
  6.         else nconc (flatten a)))
  7.  
  8. > (product-deep '((1 (2)) (3 (4)) (5 (6))))
  9. 720

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

В коде представлена функция product-deep, которая принимает один аргумент w. Внутри функции используется другая функция reduce с оператором *, которая применяет операцию умножения к элементам списка w. Функция flatten используется для преобразования списка w в одномерный список. Она использует цикл loop для итерации по элементам w. Если элемент является атомом, он добавляется в новый список. Если элемент является списком, то функция вызывает саму себя для этого элемента, чтобы продолжить процесс сглаживания списка. Таким образом, если передать в функцию product-deep список ((1 (2)) (3 (4)) (5 (6)), она будет последовательно обрабатывать каждый элемент списка. Сначала будет выполнено преобразование в одномерный список с помощью функции flatten, а затем будет выполнено умножение всех элементов с помощью функции reduce и оператора *. Результатом будет число 720.

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


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

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

6   голосов , оценка 4.167 из 5

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

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

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