Удалить из заданного списка пустые списки - Lisp
Формулировка задачи:
Помогите, пожалуйста, на Scheme: удалить из заданного списка пустые списки
Решение задачи: «Удалить из заданного списка пустые списки»
textual
Листинг программы
(defun del-null (lst) (cond ((null lst) nil) ((null (car lst)) (del-null (cdr lst))) (t (cons (car lst) (del-null (cdr lst)))))) ==> del-null (del-null '(1 2 nil 3 4 nil nil)) ==> (1 2 3 4)
Объяснение кода листинга программы
Функция del-null принимает в качестве аргумента список lst и возвращает новый список, в котором удалены все пустые списки.
- Если
lstравноnil, то возвращаемnil. - Если
car lstравноnil, то рекурсивно вызываемdel-nullс аргументомcdr lst. - Если
car lstне равноnil, то возвращаем новый список, в котором первый элемент —car lst, а остальные элементы получены путем рекурсивного вызоваdel-nullс аргументомcdr lst. Пример: (del-null '(1 2 nil 3 4 nil nil)) car lstравно1.cdr lstравно(2 nil 3 4 nil nil).car lstравно2.cdr lstравно(3 4 nil nil).car lstравно3.cdr lstравно(4 nil nil).car lstравно4.cdr lstравноnil.- Возвращаем
(1 2 3 4).