Сравнить введенный шаблон и строку (сопоставление с образцом) - Lisp

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

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

Написать функцию с двумя переменными, первая - шаблон, вторая - строка. Шаблон состоит из символа: * заменят любой символ в количестве от 0 до N, символ ? заменят только один любой символ. К примеру при введение шаблона Л**М?Н и строки ЛИМОН, они будут друг другу соответствовать.

Решение задачи: «Сравнить введенный шаблон и строку (сопоставление с образцом)»

textual
Листинг программы
(defun shablon (a b) (shablon1 (explode a) (explode b)))
 
(defun shablon1 (a b) (cond 
  ((null a) (null b))
  ((null b) nil)
  ((eq (car a) '*) (or (shablon1 (cdr a) b)
    (cond ((null b) nil) (t (shablon1 a (cdr b))))
  ))
  ((eq (car a) '?) (shablon1 (cdr a) (cdr b)))
  ((eq (car a) (car b)) (shablon1 (cdr a) (cdr b)))
  (t nil)
))
 
(shablon "Л**М?Н" "ЛИМОН")
 
==> T
 
(shablon "?" "")
 
==> NIL

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

В коде определена функция shablon, которая принимает два аргумента a и b. Внутри функции происходит вызов shablon1, в которую передаются результаты вызова explode для аргументов a и b. Функция shablon1 реализована с помощью функции cond, которая проверяет следующие условия:

  1. Если a и b равны nil, то возвращается nil.
  2. Если a равен *, то выполняется рекурсивный вызов shablon1 для cdr a и b, и результат илиится с помощью функции or.
  3. Если a равен ?, то выполняется рекурсивный вызов shablon1 для cdr a и cdr b.
  4. Если a и b равны друг другу, то возвращается nil.
  5. Если не выполнено ни одно из вышеперечисленных условий, то возвращается nil. В основной части кода вызывается функция shablon с аргументами Л**М?Н и ЛИМОН. Результатом выполнения является T, что означает, что шаблон соответствует строке. В следующем вызове функции shablon с аргументами ? и ```, результатом выполнения являетсяnil`, что означает, что шаблон не соответствует строке.

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


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

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

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