Сумма и количество чисел произвольного списка - 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)))
Объяснение кода листинга программы
В коде представлено три функции:
- fsum — принимает один аргумент x и рекурсивно обходит каждый элемент списка, пока не встретит атом или null. Если элемент является числом, то он добавляется к сумме, если атом — то 0, если null — то 0.
- fkol — принимает один аргумент x и рекурсивно обходит каждый элемент списка, пока не встретит атом или null. Если элемент является атомом — то 1, если null — то 0.
- f — принимает один аргумент x и рекурсивно обходит каждый элемент списка, пока не встретит atom или null. Если элемент является числом, то он добавляется к сумме, если атом — то 0, если null — то 0. Вызов функции f(x) возвращает список из двух элементов: сумму и количество. Вот пример использования функций: (f (list(1, 2, 3, 4, 5))) Результат выполнения: (25, 5)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д