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