Функция, которая проверяет, являются ли все элементы списка положительными числами - 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))))))

Решение задачи: «Функция, которая проверяет, являются ли все элементы списка положительными числами»

textual
Листинг программы
(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. '(1 2 3) — возвращается t, так как все элементы являются положительными числами.
  2. '(1 -2 3) — возвращается nil, так как первый элемент является отрицательным числом.
  3. '(1 a 3) — возвращается nil, так как первый элемент не является числом.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы