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

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

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

помогите, пожалуйста, исправить ошибку в решении задачи (код на Visual LISP): если максимальный элемент списка находится на первом месте, а минимум - на втором, то уменьшить все элементы списка в два раза
;поиск максимума
(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)))
консоль выдает "Неверная функция: 3" (вместо 3 могут быть и другие числа) пока создавал тему, до меня дошло, что функция вызывается не там, где нужно, но пока не понял, как это исправить

Решение задачи: «Уменьшить в 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)

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


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

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

10   голосов , оценка 3.7 из 5
Похожие ответы