Ниже приведена функция sum, которая позволяет получить сумму элементов списка, не равных NIL - Lisp

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

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

Ниже приведена функция sum, которая позволяет получить сумму элементов списка, не равных NIL. К сожалению, эта функция работает не совсем правильно: допустим, что входной список содержит только элементы NIL и цифры. Найдите и исправьте ошибки.
(defun sum (lst) 
           (let ((x (first lst)))
                  (if (null x) 
                      (sum (rest x)) 
                      (+ x (sum (rest x))))))

Решение задачи: «Ниже приведена функция sum, которая позволяет получить сумму элементов списка, не равных NIL»

textual
Листинг программы
(defun sum (w &aux (a (car w))) 
  (if w (+ (if a a 0) (sum (cdr w))) 0))
 
> (sum '(5 nil 5 nil))
10

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

В коде определена функция с именем sum. Она принимает один аргумент w. В функции используется переменная a, которая инициализируется значением первого элемента списка, переданного в функцию. Если список пустой, то a инициализируется значением NIL. Далее в функции используется условная конструкция if. Если w не равно NIL, то выполняется выражение внутри if, которое состоит из двух частей, разделенных запятой. Первая часть выражения — это сумма чисел, которые не равны NIL. Для этого используется функция if с аргументом a. Если a не равно NIL, то возвращается само значение a, иначе возвращается 0. Вторая часть выражения — это рекурсивный вызов функции sum с аргументом (cdr w). Это позволяет получить сумму всех элементов списка, кроме первого. Если w равно NIL, то возвращается 0. Код был протестирован на примере '(5 nil 5 nil), где результатом выполнения функции sum является число 10.

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


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

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

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