Найти арифметическую сумму - Lisp

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

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

Найти арифметическую сумму с условием ,что автоматически знак каждого элемента чередуется программа должна возвр количество элементов и их сумму и по возможности результат деления суммы на количество

Решение задачи: «Найти арифметическую сумму»

textual
Листинг программы
(defun task (lst &optional (c 0) (sev 0) (sod 0))
  (cond ((null lst) (if (zerop c) 'empty_list! (/ (- sev sod) c))) ;; четн минус нечетн
        ((evenp c) (task (cdr lst) (+ c 1) (+ sev (car lst)) sod))
        (t         (task (cdr lst) (+ c 1) sev (+ sod (car lst))))))
 
==> task
 
(task '(1 2 3 4 5 6 7 8 9 10))
 
==> -1/2

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

В коде определена функция task, которая принимает два аргумента: lst и c. Аргумент c является счетчиком, а lst — список чисел. Если список пустой, то возвращается значение empty_list!. Иначе, если c — четное число, то вызывается рекурсивный вызов функции task для списка cdr lst, увеличенного счетчика c и суммы sev и sod, которые инициализированы нулем. Если c — нечетное число, то также вызывается рекурсивный вызов функции task для списка cdr lst, увеличенного счетчика c и суммы sev и sod, которые инициализированы нулем. В конце функции возвращается результат вычисления (- sev sod) / c. Значения переменных в коде: — lst — список чисел (1 2 3 4 5 6 7 8 9 10)c — счетчик, инициализированный нулем — sev — сумма нечетных элементов списка, инициализированная нулем — sod — сумма четных элементов списка, инициализированная нулем

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


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

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

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