В списке 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:

  1. (task '(1 2 3 3 4 5 4 4 3)) Результат: (1 2 3 4 5 4 3)
  2. (task '(1 2 3 3 4 5 4 4 3 1 1 1)) Результат: (1 2 3 4 5 4 3 1)

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


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

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

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