Сумма и количество чисел произвольного списка - Lisp (229300)

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

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

Дан список произвольной структуры, в который входят как числа, так и символьные атомы. Написать функцию, которая возвращает список из двух чисел, первое из них равно сумме чисел исходного списка, а второе их количеству. ((1 A)(2 (3) B (4))) —> (10 4) Ее я почти сделал, не получается проверить атом на число, в строке ((and (atom x) T) x) пишу вместо T (numberp x), но выдает ошибку, не могу никак понять в чем дело.
(defun fsum (x) //сумму считает в списке
(cond
  ((null x) 0)
  ((and (atom x) T) x)
  (T (+ (fsum (car x)) (fsum (cdr x))))))
  
(defun fkol (x)  //количество атомов считает
(cond
  ((null x) 0)
  ((and (atom x) T) 1)
  (T (+ (fkol (car x)) (fkol (cdr x))))))
  
(defun f (x)
   (list (fsum x) (fkol x)))

Решение задачи: «Сумма и количество чисел произвольного списка»

textual
Листинг программы
(defun fsum (x) //сумму считает в списке
 (cond
  ((null x) 0)
  ((numberp x) x)
  ((atom x) 0)
  (T (+ (fsum (car x)) (fsum (cdr x))))))
  
(defun fkol (x)  //количество атомов считает
 (cond
  ((null x) 0)
  ((atom x) 1)
  (T (+ (fkol (car x)) (fkol (cdr x))))))
  
(defun f (x)
   (list (fsum x) (fkol x)))

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

В коде представлено три функции:

  1. fsum — принимает один аргумент x и рекурсивно обходит каждый элемент списка, пока не встретит атом или null. Если элемент является числом, то он добавляется к сумме, если атом — то 0, если null — то 0.
  2. fkol — принимает один аргумент x и рекурсивно обходит каждый элемент списка, пока не встретит атом или null. Если элемент является атомом — то 1, если null — то 0.
  3. f — принимает один аргумент x и рекурсивно обходит каждый элемент списка, пока не встретит atom или null. Если элемент является числом, то он добавляется к сумме, если атом — то 0, если null — то 0. Вызов функции f(x) возвращает список из двух элементов: сумму и количество. Вот пример использования функций: (f (list(1, 2, 3, 4, 5))) Результат выполнения: (25, 5)

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


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

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

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