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

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

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

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

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

textual
Листинг программы
  1. (defun shablon (a b) (shablon1 (explode a) (explode b)))
  2.  
  3. (defun shablon1 (a b) (cond
  4.   ((null a) (null b))
  5.   ((null b) nil)
  6.   ((eq (car a) '*) (or (shablon1 (cdr a) b)
  7.     (cond ((null b) nil) (t (shablon1 a (cdr b))))
  8.   ))
  9.   ((eq (car a) '?) (shablon1 (cdr a) (cdr b)))
  10.   ((eq (car a) (car b)) (shablon1 (cdr a) (cdr b)))
  11.   (t nil)
  12. ))
  13.  
  14. (shablon "Л**М?Н" "ЛИМОН")
  15.  
  16. ==> T
  17.  
  18. (shablon "?" "")
  19.  
  20. ==> 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

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

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

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