Строка: Определить функцию, которая строку преобразует в одноуровневый список. - 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
и возвращает одноуровневый список.
Алгоритм работы такой:
- Сначала мы ищем позицию первого символа двоеточия в строке
s
и сохраняем её в переменнойp
. - Если
p
не равноnil
, то мы разделяем строкуs
на две части по позицииp
и вызываем рекурсивно функциюcleave
для второй части. Результатом будет список, в который добавится первая часть строки и результат рекурсивного вызова. - Если
p
равноnil
, то мы просто возвращаем исходную строку, преобразованную в список. Затем мы вызываем функциюcleave
с аргументомaa:bb:cc
и выводим результат — списокaa` `bb` `cc
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д