Максимальное произведение трех чисел списка - Lisp
Формулировка задачи:
Решение задачи: «Максимальное произведение трех чисел списка»
- (defun del1 (a x)
- (if (= a (car x))
- (cdr x)
- (cons (car x) (del1 a (cdr x)))
- )
- )
- (defun maxmul (x &aux (a1 (apply 'max x)) a2 value y)
- (if (< (length x) 3)
- nil
- (progn
- (setq x (del1 a1 x))
- (setq y x)
- (setq value
- (*
- a1
- (setq a2 (apply 'max x))
- (apply 'max (del1 a2 x))
- )
- )
- (max
- value
- (*
- a1
- (setq a2 (apply 'min y))
- (apply 'min (del1 a2 y))
- )
- )
- )
- )
- )
- (maxmul '(1 2 3 4 5))
- ==> 60
- (maxmul '(1 2 3 4 -5))
- ==> 24
- (maxmul '(1 2 3 -4 -5))
- ==> 60
- (maxmul '(1 2 -3))
- ==> -6
- (maxmul '(1 2))
- ==> NIL
Объяснение кода листинга программы
В первом случае, мы имеем дело с рекурсивной функцией, которая принимает три аргумента: a
, x
и y
. Первый аргумент a
— это текущий максимум, второй аргумент x
— это список чисел, который нужно обработать, а третий аргумент y
— это результат, который мы получаем на данный момент.
Функция del1
используется для рекурсивного удаления первого элемента из списка x
, если он равен a
. Если это не так, то первый элемент списка x
добавляется обратно в список y
. Эта функция вызывается рекурсивно до тех пор, пока список x
не станет пустым или не будет состоять только из одного элемента.
Функция maxmul
используется для нахождения максимального произведения трех чисел в списке x
. Сначала мы находим максимальное значение в списке x
с помощью функции apply
и присваиваем его переменной a1
. Затем мы вызываем функцию del1
с аргументами a1
и x
, чтобы удалить первый элемент из списка x
и присваиваем результат переменной y
. Затем мы находим максимальное значение в списке y
с помощью функции apply
и присваиваем его переменной a2
. После этого мы снова вызываем функцию del1
с аргументами a2
и y
, чтобы удалить первый элемент из списка y
и присваиваем результат переменной y
. Затем мы находим максимальное значение из трех чисел a1
, a2
и y
с помощью функции apply
и присваиваем его переменной value
.
Если длина списка x
меньше трех, то мы возвращаем nil
. В противном случае, мы присваиваем значение переменной value
максимальному произведению трех чисел a1
, a2
и y
.
Во втором случае, мы передаем список '(1 2 3 4 -5) в функцию maxmul
. Функция maxmul
вызывает функцию del1
и находит максимальное значение в списке x
, которое равно 6. Затем она находит максимальное значение из трех чисел 6, 6 и -5, которое равно 6. В результате мы получаем значение 60.
В третьем случае, мы передаем список '(1 2 3 -4 -5) в функцию maxmul
. Функция maxmul
вызывает функцию del1
и находит максимальное значение в списке x
, которое равно -4. Затем она находит максимальное значение из трех чисел -4, -4 и -5, которое равно -4. В результате мы получаем значение 60.
В четвертом случае, мы передаем список '(1 2 -3) в функцию maxmul
. Функция maxmul
вызывает функцию del1
и находит максимальное значение в списке x
, которое равно -3. Затем она находит максимальное значение из трех чисел -3, -3 и -3, которое равно -3. В результате мы получаем значение -6.
В пятом случае, мы передаем список '(1 2) в функцию maxmul
. Функция maxmul
вызывает функцию del1
и находит максимальное значение в списке x
, которое равно пустому списку. Затем она находит максимальное значение из трех чисел пустого списка, пустого списка и пустого списка, которое также равно пустому списку. В результате мы получаем значение nil
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д