Уменьшить в 2 раза элементы списка, если максимум на первом месте и минимум на втором - Lisp

Узнай цену своей работы

Формулировка задачи:

помогите, пожалуйста, исправить ошибку в решении задачи (код на Visual LISP): если максимальный элемент списка находится на первом месте, а минимум - на втором, то уменьшить все элементы списка в два раза
Листинг программы
  1. ;поиск максимума
  2. (DEFUN MAXX(lst)
  3. (COND
  4. ((NULL lst) 0)
  5. ((> (CAR lst) (MAXX(CDR lst))) (CAR lst))
  6. (T(MAXX(CDR lst)))))
  7. ;поиск минимума
  8. (DEFUN MINN(lst)
  9. (COND
  10. ((NULL (CDR lst)) (CAR lst))
  11. ((< (CAR lst) (MINN(CDR lst))) (CAR lst))
  12. (T(MINN(CDR lst)))))
  13. ;основная функция
  14. (DEFUN DIVBYTWO(lst)
  15. (COND
  16. ((null lst) lst)
  17. ( (AND (= (maxx lst) (car lst)) (= (minn lst) (car (cdr lst)))) ((/ (car lst) 2) (DIVBYTWO(CDR lst))) )
  18. (T lst)))
консоль выдает "Неверная функция: 3" (вместо 3 могут быть и другие числа) пока создавал тему, до меня дошло, что функция вызывается не там, где нужно, но пока не понял, как это исправить

Решение задачи: «Уменьшить в 2 раза элементы списка, если максимум на первом месте и минимум на втором»

textual
Листинг программы
  1. (defun half (w)
  2.   (if (and (cdr w)
  3.            (= (car w) (apply #'max w))
  4.            (= (cadr w) (apply #'min w)))
  5.       (div w 2)
  6.       w))
  7.  
  8. (defun div (w n)
  9.   (cond ((null w) nil)
  10.         (t (cons (/ (car w) n) (div (cdr w) n)))))
  11.  
  12. > (half '(10 10.0 10.0))
  13. (5 5.0 5.0)
  14. > (half '(100 4 10 10.0 10.0))
  15. (50 2 5 5.0 5.0)

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


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

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

10   голосов , оценка 3.7 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы