Список из числовых элементов с учетом подсписков - Lisp
Формулировка задачи:
Доброго времени суток!
Помогите, пожалуйста, найти ошибку в коде.
Задача в следующем: Создать функцию, создающую список только из числовых элементов исходного списка, учитывая подсписки.
Пример:
Я написала следующий код:
Вызов дает вот такой результат:
Как избавить от подсписков в результате?
(fun '( 2 3 4 (h 5) (5 ( h 5) 1)))) (2 3 4 5 5 5 1)
(defun fun (lst) (cond ((null lst) nil) ( (numberp (car lst)) (cons (car lst) (fun (cdr lst)))) ( (listp (car lst)) (cons (fun(car lst)) (fun (cdr lst)))) (t (fun(cdr lst))) ))
(fun'( 2 3 4 (h 5) (5 ( h 5) 1))) (2 3 4 (5) (5 (5) 1))
Решение задачи: «Список из числовых элементов с учетом подсписков»
textual
Листинг программы
(defun nums (w) (loop for a in w if (listp a) nconc (nums a) else if (numberp a) collect a)) > (nums '(a 1 (2 a) (((3 4 a)) 5 a))) (1 2 3 4 5)
Объяснение кода листинга программы
В этом коде определён функцией список из чисел с учётом подсписков.
- (defun — определение функции с именем nums)
- (loop — начало цикла)
- (for — цикл по элементам списка переменных)
- (if (listp a) — проверка является ли элемент списком)
- (nconc — объединение списков)
- (nums a) — рекурсивный вызов функции с аргументом a)
- (else if (numberp a) — проверка является ли элемент числом)
- (collect a) — сбор чисел в список)
- (return (1 2 3 4 5)) — возвращение результата
- (nums '(a 1 (2 a) (((3 4 a)) 5 a))) — вызов функции с аргументом (a 1 (2 a) (((3 4 a)) 5 a)))
- (1 2 3 4 5) — результат выполнения функции
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д