Scheme вложенные списки - Lisp

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

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

Всем привет, хочу задать такой вопрос: как соорудить процедуру, которая раскрывает вложенные списки? При вызове процедуры (my-flatten '((1) 2 (3 (4 5)) 6)) , она должна на выходе выдавать аккуратненький список без скобок (1 2 3 4 5 6) Нужен ли здесь хитрый предикат, с помощью которого программа будет понимать, что перед нами рекурсивное (car (car (car ...))) ?

Решение задачи: «Scheme вложенные списки»

textual
Листинг программы
  1. (defun flat (lst)
  2.  (cond ((null lst) nil)
  3.        ((atom (car lst)) (cons (car lst) (flat (cdr lst))))
  4.        (t (append (flat (car lst)) (flat (cdr lst))))))
  5.  
  6. ==> flat
  7.  
  8. (flat '(1 2 ((5 6) 7)))
  9.  
  10. ==> (1 2 5 6 7)
  11.  
  12. (flat '(1 2 ((5 6) (((0))) 7)))
  13.  
  14. ==> (1 2 5 6 0 7)

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

Функция flat принимает на вход список lst и возвращает список, содержащий только один уровень вложенности. Рекурсивный алгоритм функции для получения такого результата выглядит следующим образом:

  1. Если lst — это пустой список, то возвращается nil.
  2. Если lst — это атом, то возвращается сам атом.
  3. Если lst — это список, то возвращается результат рекурсивного вызова функции flat для car lst и cdr lst.
  4. Если lst — это не список, то возвращается пустой список.

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


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

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

14   голосов , оценка 4 из 5

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

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

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