В списке L из каждой группы подряд идущих равных элементов оставить только один элемент - Lisp

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

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

В списке L из каждой группы подряд идущих равных элементов оставить только один элемент Например, 2 2 1 1 3 3, после введения в программу останется: 2 1 3 Помогите пожалуйста решить задачу!

Решение задачи: «В списке L из каждой группы подряд идущих равных элементов оставить только один элемент»

textual
Листинг программы
  1. (defun task (lst)
  2.  (let ((res nil))
  3.   (iter (for i in lst) (for j in (cdr lst))
  4.      (unless (eq i j) (collecting i into res)))
  5.   (append res (last lst))))
  6.  
  7. ==> task
  8.  
  9. (task '(1 2 3 3 4 5 4 4 3))
  10.  
  11. ==> (1 2 3 4 5 4 3)
  12.  
  13. (task '(1 2 3 3 4 5 4 4 3 1 1 1))
  14.  
  15. ==> (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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы