Вывести True, если первый список является префиксом второго - Lisp

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

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

Здравствуйте! Приношу свои извеинения за наглость. Но не могли бы мне помочь написать программу , которая должна выводить True если первый список является префиксом второго , а третий список суффиксом второго , в противном случае False уже неделю ковыряю))

Решение задачи: «Вывести True, если первый список является префиксом второго»

textual
Листинг программы
(defun task (l1 l2 l3)
  (labels ((is-prefix (x1 x2)
              (cond ((null x1) t)
                    ((equal (car x1) (car x2)) (is-prefix (cdr x1) (cdr x2)))
                    (t nil))))
           (and (is-prefix l1 l2) (is-prefix (reverse l3) (reverse l2)))))
           
 
==> task
 
(task '(1 2) '(1 2 3 4 5) '(4 5))
 
==> T
 
(task '(1 3) '(1 2 3 4 5) '(4 5))
 
==> NIL

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

В коде определена функция task, которая принимает три аргумента: l1, l2, l3. Функция использует внутреннюю функцию is-prefix, которая принимает два аргумента: x1 и x2. Если x1 равно null, то возвращается t. Иначе функция проверяет, равны ли первые элементы списков x1 и x2. Если равны, то рекурсивно вызывается функция is-prefix для оставшихся частей списков (cdr x1) и (cdr x2). Если не равны, то возвращается nil. Функция task использует функцию is-prefix для проверки, является ли первый список l1 префиксом второго списка l2. Также функция проверяет, является ли третий список l3 префиксом второго списка l2, но уже в обратном порядке. Если оба условия выполняются, то возвращается t. В противном случае возвращается nil. При вызове функции task с аргументами '(1 2), '(1 2 3 4 5) и '(4 5), функция проверяет, является ли первый список l1 префиксом второго списка l2. Первый список '(1 2) является префиксом второго списка '(1 2 3 4 5), поэтому функция возвращает t. При вызове функции task с аргументами '(1 3), '(1 2 3 4 5) и '(4 5), функция проверяет, является ли первый список l1 префиксом второго списка l2. Первый список '(1 3) не является префиксом второго списка '(1 2 3 4 5), поэтому функция возвращает nil.

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


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

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

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