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