Функция, разбивающая список на подсписки - Lisp

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

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

Добрый день Не могли бы вы подсказать мне, как сделать функцию, которая разбивает список элементов таким образом: Допустим, на вход подаётся список (a a a c b b a c c b) С А выход: (a a a) (c) (b b) (a) (c c) (b) (задействованы car cdr и условный оператор)

Решение задачи: «Функция, разбивающая список на подсписки»

textual
Листинг программы
  1. (define (task lst)
  2.   (reverse (foldl (lambda (a b) (if (equal? a (first (first b)))
  3.                                     (cons (cons a (first b)) (rest b))
  4.                                     (cons (list a) b)))
  5.                   (list (list (first lst)))
  6.                   (rest lst))))
  7.  
  8.  
  9. (task '(a a a b d c d b b c))
  10. ;'((a a a) (b) (d) (c) (d) (b b) (c)

Объяснение кода листинга программы

В коде определена функция task, которая принимает в качестве аргумента список lst. Сначала применена функция reverse к результату вызова foldl с следующей параметрной функцией: (lambda (a b) (if (equal? a (first (first b))) (cons (cons a (first b)) (rest b)) (cons (list a) b)) В этой функции используется условие equal? для определения, является ли первый элемент a первым элементом списка b. Если это так, то возвращается cons с двумя элементами: a и первый элемент b. В противном случае возвращается cons с одним элементом: a. Затем применяется функция cons для добавления полученного элемента в начало списка b. Результатом применения foldl является список, который затем обрабатывается функцией reverse. Затем результат reverse присваивается переменной task, и вызывается функция task с аргументом lst. Результат выполнения кода: ((a a a) (b) (d) (c) (d) (b b) (c)) Это разбиение исходного списка lst на подсписки, где первый элемент каждого подсписка является уникальным.

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


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

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

11   голосов , оценка 3.818 из 5

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

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

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