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

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

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

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

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

textual
Листинг программы
  1. (defun fsum (x) //сумму считает в списке
  2.  (cond
  3.   ((null x) 0)
  4.   ((numberp x) x)
  5.   ((atom x) 0)
  6.   (T (+ (fsum (car x)) (fsum (cdr x))))))
  7.  
  8. (defun fkol (x)  //количество атомов считает
  9.  (cond
  10.   ((null x) 0)
  11.   ((atom x) 1)
  12.   (T (+ (fkol (car x)) (fkol (cdr x))))))
  13.  
  14. (defun f (x)
  15.    (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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы