Определить функцию, возвращающую значение произведения ряда целых нечётных чисел - Lisp
Формулировка задачи:
Дано число N. Определить функцию, возвращающую значение произведения ряда целых нечётных чисел от 1 до N. Использовать только базис Лиспа
Решение задачи: «Определить функцию, возвращающую значение произведения ряда целых нечётных чисел»
textual
Листинг программы
(defun product-even (w) (reduce #'* (remove-if #'zerop (remove-if-not #'evenp w)))) > (product-even '(0 1 2 3 4)) 8
Объяснение кода листинга программы
В данном коде определена функция product-even, которая принимает один аргумент w.
- В первой строке кода функция
reduceвызывается с двумя аргументами:#'*— это оператор, который должен применяться последовательно к элементам списка, а(remove-if #'zerop (remove-if-not #'evenp w))— это список, который нужно последовательно умножать, начиная с первого элемента. - Вторая строка кода удаляет все элементы списка
w, которые равны нулю, с помощью функцииremove-ifи булевого значения#'zerop. - Третья строка кода удаляет все нечетные числа из списка
w, которые не равны нулю, с помощью функцииremove-if-notи булевого значения#'evenp. - Результатом выполнения функции
reduceбудет произведение всех оставшихся элементов спискаw, которые являются четными числами. Таким образом, если мы вызовем функциюproduct-evenс аргументом(0 1 2 3 4), то она вернет результат8, так как произведение всех четных чисел в данном списке равно 8.