С использованием рекурсии сделать, и пример обязательно - Lisp
Формулировка задачи:
Функция должна возвращать список позиций вхождения lst2 в lst1 и глубину нахождения lst2 в lst1.
Решение задачи: «С использованием рекурсии сделать, и пример обязательно»
textual
Листинг программы
(defn f (a l) (defn is-prefix (l) (eq? a (take (length a) l))) (defn go (i d l) (cond (atom? l) nil (null? l) nil ((def r (go (+ 1 i) d (cdr l))) (append (go 0 (+ 1 d) (car l)) (cond (is-prefix l) (cons (cons i d) r) r))))) (go 0 1 l)) (printLn (f '(1 1) '(1 1 1 2 (3 1 1 4 (1 1 1)) 6 (2 1 1)))) ........ ((0 1) (1 1) (1 2) (0 3) (1 3) (1 2))
Объяснение кода листинга программы
В данном коде используется язык программирования Lisp. Постановка задачи - реализовать рекурсивную функцию для поиска префиксов в строке.
- Создаётся функция
f
с двумя аргументамиa
иl
. - Внутри функции
f
создаётся вспомогательная функцияis-prefix
, которая проверяет, является лиa
префиксомl
. - Далее создаётся вспомогательная функция
go
, которая реализует рекурсивный алгоритм для поиска префиксов в строкеl
. - В функции
go
используются условия для проверки на атом, на ноль и на неравенство нулю. - В случае, если
l
является атомом, то возвращаетсяnil
. - Если
l
равноnil
, то также возвращаетсяnil
. - Если
l
не равноnil
, то создаётся новая переменнаяr
, которая равна результату вызова функцииgo
с аргументами+1
иd
(гдеd
это длинуa
), и без аргументовl
возвращаетсяnil
. - В случае, если
l
не является атомом, то добавляется элементi
в начало результатаr
, и возвращается новый список. - Результат вызова функции
go
с аргументами0
и1
и без аргументовl
присваивается переменнойgo
. - В конце кода вызывается функция
printLn
с аргументомf
, что приводит к выводу списка префиксов для введённой строки. Список префиксов для строки(1 1 1 2 (3 1 1 4 (1 1 1)) 6 (2 1 1)
равен((0 1) (1 1) (1 2) (0 3) (1 3) (1 2))
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д