В списке L из каждой группы подряд идущих равных элементов оставить только один элемент - Lisp
Формулировка задачи:
Решение задачи: «В списке L из каждой группы подряд идущих равных элементов оставить только один элемент»
- (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)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д