В списке L из каждой группы подряд идущих равных элементов оставить только один элемент - Lisp
Формулировка задачи:
В списке L из каждой группы подряд идущих равных элементов оставить только один элемент
Например, 2 2 1 1 3 3, после введения в программу останется: 2 1 3
Помогите пожалуйста решить задачу!
Решение задачи: «В списке L из каждой группы подряд идущих равных элементов оставить только один элемент»
textual
Листинг программы
(defun task (lst) (let ((res nil)) (iter (for i in lst) (for j in (cdr lst)) (unless (eq i j) (collecting i into res))) (append res (last lst)))) ==> task (task '(1 2 3 3 4 5 4 4 3)) ==> (1 2 3 4 5 4 3) (task '(1 2 3 3 4 5 4 4 3 1 1 1)) ==> (1 2 3 4 5 4 3 1)
Объяснение кода листинга программы
В коде определена функция task, которая принимает в качестве аргумента список lst. Функция использует цикл iter для прохода по всем элементам списка lst. На каждой итерации внутреннего цикла проверяется равенство текущего элемента i с последующим элементом j. Если элементы не равны, то текущий элемент i добавляется в результат res с помощью функции collecting. Если элементы равны, то пропуск итерации внешнего цикла с помощью функции next. В конце функция возвращает результат res, который является списком, содержащим только один элемент из каждой группы равных элементов в списке lst. Примеры вызовов функции task:
- (task '(1 2 3 3 4 5 4 4 3)) Результат: (1 2 3 4 5 4 3)
- (task '(1 2 3 3 4 5 4 4 3 1 1 1)) Результат: (1 2 3 4 5 4 3 1)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д