Функция, которая проверяет, являются ли все элементы списка положительными числами - 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, так как первый элемент не является числом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д