Уменьшить в 2 раза элементы списка, если максимум на первом месте и минимум на втором - Lisp
Формулировка задачи:
помогите, пожалуйста, исправить ошибку в решении задачи (код на Visual LISP):
если максимальный элемент списка находится на первом месте, а минимум - на втором, то уменьшить все элементы списка в два раза
консоль выдает "Неверная функция: 3" (вместо 3 могут быть и другие числа)
пока создавал тему, до меня дошло, что функция вызывается не там, где нужно, но пока не понял, как это исправить
;поиск максимума (DEFUN MAXX(lst) (COND ((NULL lst) 0) ((> (CAR lst) (MAXX(CDR lst))) (CAR lst)) (T(MAXX(CDR lst))))) ;поиск минимума (DEFUN MINN(lst) (COND ((NULL (CDR lst)) (CAR lst)) ((< (CAR lst) (MINN(CDR lst))) (CAR lst)) (T(MINN(CDR lst))))) ;основная функция (DEFUN DIVBYTWO(lst) (COND ((null lst) lst) ( (AND (= (maxx lst) (car lst)) (= (minn lst) (car (cdr lst)))) ((/ (car lst) 2) (DIVBYTWO(CDR lst))) ) (T lst)))
Решение задачи: «Уменьшить в 2 раза элементы списка, если максимум на первом месте и минимум на втором»
textual
Листинг программы
(defun half (w) (if (and (cdr w) (= (car w) (apply #'max w)) (= (cadr w) (apply #'min w))) (div w 2) w)) (defun div (w n) (cond ((null w) nil) (t (cons (/ (car w) n) (div (cdr w) n))))) > (half '(10 10.0 10.0)) (5 5.0 5.0) > (half '(100 4 10 10.0 10.0)) (50 2 5 5.0 5.0)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д