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

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

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

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

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

textual
Листинг программы
  1. (defun task (l1 l2 l3)
  2.   (labels ((is-prefix (x1 x2)
  3.               (cond ((null x1) t)
  4.                     ((equal (car x1) (car x2)) (is-prefix (cdr x1) (cdr x2)))
  5.                     (t nil))))
  6.            (and (is-prefix l1 l2) (is-prefix (reverse l3) (reverse l2)))))
  7.            
  8.  
  9. ==> task
  10.  
  11. (task '(1 2) '(1 2 3 4 5) '(4 5))
  12.  
  13. ==> T
  14.  
  15. (task '(1 3) '(1 2 3 4 5) '(4 5))
  16.  
  17. ==> 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы