Строка: Определить функцию, которая строку преобразует в одноуровневый список. - Lisp

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

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

Определить функцию, которая строку преобразует в одноуровневый список. Например из "aa:bb:cccc:kk" получится ("aa" "bb" "cccc" "kk"). Должно осуществляться с помощью рекурсии и нельзя использовать revers

Решение задачи: «Строка: Определить функцию, которая строку преобразует в одноуровневый список.»

textual
Листинг программы
(defun cleave (s &aux (p (position #\: s)))
  (if p (cons (subseq s 0 p)
              (cleave (subseq s (1+ p))))
      (list s)))
      
(print (cleave "aa:bb:cc"))      
 
==> ("aa" "bb" "cc")

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

В этом коде определена функция cleave, которая принимает строку s и возвращает одноуровневый список. Алгоритм работы такой:

  1. Сначала мы ищем позицию первого символа двоеточия в строке s и сохраняем её в переменной p.
  2. Если p не равно nil, то мы разделяем строку s на две части по позиции p и вызываем рекурсивно функцию cleave для второй части. Результатом будет список, в который добавится первая часть строки и результат рекурсивного вызова.
  3. Если p равно nil, то мы просто возвращаем исходную строку, преобразованную в список. Затем мы вызываем функцию cleave с аргументом aa:bb:cc и выводим результат — список aa` `bb` `cc.

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


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

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

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