Функция, которая проверяет, являются ли все элементы списка положительными числами - Lisp
Формулировка задачи:
Задачка:
а) напишите функцию, которая проверяет, являются ли все элементы списка положительными числами. Функция возвращает NIL, если хотя бы один элемент списка НЕ является числом, или если в списке есть хотя бы один отрицательный элемент.
б)
определите функцию умножения двух целых чисел через сложение и вычитание.
(defun lw3a (x)
(cond ((null x))
((not (numberp (car x))) (lw3a (cdr x)))
((minusp (car x)) (lw3a (cdr x)))))
(defun lw3b (x y)
(cond
((zerop y) 0)
((equal y 1) x)
(t (+ x (lw3b x (- y 1))))))Решение задачи: «Функция, которая проверяет, являются ли все элементы списка положительными числами»
(defun lw3a (x) (cond ((null x) t) ((not (numberp (car x))) nil) ((minusp (car x)) nil) (t (lw3a (cdr x))))) ==> lw3a (lw3a '(1 2 3)) ==> T (lw3a '(1 -2 3)) ==> NIL (lw3a '(1 a 3)) ==> NIL
Объяснение кода листинга программы
В коде определена функция с именем lw3a. Она принимает один аргумент x. Если x — это пустой список, то возвращается t. Если первый элемент списка не является числом, то возвращается nil. Если первый элемент списка является отрицательным числом, то возвращается nil. В противном случае функция рекурсивно вызывается для оставшейся части списка. Код был протестирован на трёх списках:
- '(1 2 3) — возвращается t, так как все элементы являются положительными числами.
- '(1 -2 3) — возвращается nil, так как первый элемент является отрицательным числом.
- '(1 a 3) — возвращается nil, так как первый элемент не является числом.