Вложенный Список - Lisp
Формулировка задачи:
Проверить, является ли список списком чисел, или нет
Работающий код:
Нужно к этому добавить проверку и на вложенный список(если вложенный, выводил true)
(defun check (lst)
(cond
((Null lst)
"yes"
)
((numberp (car lst))
(check (cdr lst))
)
(
"no"
)
)
)Решение задачи: «Вложенный Список»
textual
Листинг программы
(defun is-num-list (lst) (cond ((null lst) t) ((numberp (car lst)) (is-num-list (cdr lst))) ((listp (car lst)) (and (is-num-list (car lst)) (is-num-list (cdr lst)))) (t nil))) ==> is-num-list (is-num-list '(1 2 3 (((6 7) 8) 9))) ==> T (is-num-list '(1 2 3 (((6 7) a) 9))) ==> NIL
Объяснение кода листинга программы
В данном коде определён встроенный функцию is-num-list, которая принимает в качестве аргумента список lst.
Если lst — это пустой список, то возвращается t.
Если первый элемент lst является числом, то функция рекурсивно вызывается для оставшейся части списка.
Если первый элемент lst является вложенным списком, то функция проверяет, все ли элементы в этом списке являются числами. Если это так, то функция рекурсивно вызывается для оставшейся части вложенного списка. Если это не так, то возвращается nil.
Если первый элемент lst не является ни числом, ни вложенным списком, то возвращается nil.