Замена в исходном списке двух подряд идущих одинаковых элементов одним - Lisp
Формулировка задачи:
- (DEFUN REMOVEF (LAMBDA (X LST)
- (COND ( (NULL LST) NIL )
- ( (EQ X (CAR LST)) (CDR LST) )
- ( T (CONS (CAR LST) (REMOVEF X (CDR LST))) )
- )
- ))
Решение задачи: «Замена в исходном списке двух подряд идущих одинаковых элементов одним»
- (defun 2-to-1 (x)
- (when x
- (cons (first x)
- (2-to-1 (rest (if (equalp (first x) (second x))
- (rest x)
- x))))))
Объяснение кода листинга программы
В коде представлена функция с именем 2-to-1, которая принимает один аргумент x. Функция проверяет, является ли x не пустым списком. Если это так, то функция добавляет первый элемент списка в новый список и затем рекурсивно вызывает себя для оставшейся части списка. Если первый элемент списка равен второму, то функция вызывает себя для оставшейся части списка без добавления первого элемента в новый список. Если первый элемент списка не равен второму, то функция добавляет первый элемент списка в новый список и затем вызывает себя для оставшейся части списка. Результатом работы функции является новый список, в котором два подряд идущих одинаковых элемента заменены одним. Вот пример работы функции с результатом: (2-to-1 '(1 2 2 3 4)) Результат: (1 2 3 4) В данном примере функция 2-to-1 принимает список '(1 2 2 3 4) и заменяет два подряд идущих одинаковых элемента '2' на один, в результате чего получается список '(1 2 3 4).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д