Уменьшить в 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)