Найти произведение всех ненулевых чисел из заданного сложного списка с использованием lambda - Lisp

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

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

Помогите пожалуйста. У нас есть код который находит произведение всех ненулевых чисел из заданного сложного списка.
(defun multiply (list)
    (cond
        ((null (cdr list)) (car list))
        ((not(atom (car list))) (cons (multiply (car list)) (multiply (cdr list))) )
        ((= (car list) 0) (multiply (cdr list)))
        (t (* (car list)  (multiply (cdr list))))
    )
)
Нужно его переделать с использованием lambda. Т.е. тоже самое что есть, только использовать нужно в коде lambda. Заранее большое спасибо.

Решение задачи: «Найти произведение всех ненулевых чисел из заданного сложного списка с использованием lambda»

textual
Листинг программы
(defun task (lst)
  (reduce #'(lambda (acc x) (if (zerop x) acc (* acc x))) lst :initial-value 1))
 
==> task
 
(task '(1 2 3 0 0 0 4 5 6 0 0 0))
 
==> 720

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

В коде определена функция с именем task. Она принимает в качестве аргумента lst — заданный сложный список. Внутри функции используется функция reduce, которая позволяет применить к заданному списку анонимную функцию (lambda). Анонимная функция (lambda) принимает два аргумента: acc — аккумулятор (результат предыдущих вычислений) и x — текущий элемент списка. Внутри функции происходит проверка: если x равно нулю, то значение аккумулятора остается неизменным. В противном случае значение аккумулятора увеличивается на произведение текущего элемента списка и аккумулятора. В конце функции reduce указывается исходное значение аккумулятора, равное 1. В результате выполнения функции task для списка '(1 2 3 0 0 0 4 5 6 0 0 0) будет получено произведение всех ненулевых элементов, равное 720.

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


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

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

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