Вернуть список позиций вхождения list2 в list1 и глубину нахождения list2 в list1 - Lisp

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

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

Здравствуйте! Делаю не на лиспе, но язык такой же практически, немного названия функций другие. Задание: написать функцию, возвращающую список позиций вхождения list2 в list1 и глубину нахождения list2 в list1. Сделала для возвращения глубины. Подскажите как доделать до нужного результата?
;count - счетчик списков на текущей глубине
;newL - список элементов на следующей глубине
 
#lang racket
(define (fun L A1)
  (define (fun-iter L newL tekGlubina count)
    (if (null? L)
        (if (= count 0) tekGlubina
            (fun-iter newL '() (+ tekGlubina 1) 0))
        (let ((fstL (car L)))
          (if (list? fstL)
              (fun-iter (cdr L) (append fstL newL) tekGlubina (+ count 1))
              (fun-iter (cdr L) newL tekGlubina count)))))
  (fun-iter L '() 1 0))
 
(fun '(1 ((1)) 5 6) 1)

Решение задачи: «Вернуть список позиций вхождения list2 в list1 и глубину нахождения list2 в list1»

textual
Листинг программы
#lang racket
 
(define (func L)
  (define (inter L newL lvl count result)
    (cond
      [(null? L) (if (null? newL) (reverse result)
                                  (inter newL
                                         '()
                                         (+ lvl 1)
                                         0
                                         (cons (list lvl count)
                                         result)))]
      [(list? (car L)) (inter (cdr L)
                              (append (cons 1 (car L)) newL)
                              lvl
                              (+ count 1)
                              result)]
      [else (inter (cdr L) newL lvl count result)]))
  (inter L '() 0 0 '()))

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


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

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

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