С использованием рекурсии сделать, и пример обязательно - 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. Постановка задачи - реализовать рекурсивную функцию для поиска префиксов в строке.

  1. Создаётся функция f с двумя аргументами a и l.
  2. Внутри функции f создаётся вспомогательная функция is-prefix, которая проверяет, является ли a префиксом l.
  3. Далее создаётся вспомогательная функция go, которая реализует рекурсивный алгоритм для поиска префиксов в строке l.
  4. В функции go используются условия для проверки на атом, на ноль и на неравенство нулю.
  5. В случае, если l является атомом, то возвращается nil.
  6. Если l равно nil, то также возвращается nil.
  7. Если l не равно nil, то создаётся новая переменная r, которая равна результату вызова функции go с аргументами +1 и d (где d это длину a), и без аргументов l возвращается nil.
  8. В случае, если l не является атомом, то добавляется элемент i в начало результата r, и возвращается новый список.
  9. Результат вызова функции go с аргументами 0 и 1 и без аргументов l присваивается переменной go.
  10. В конце кода вызывается функция 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)).

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


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

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

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