Обработка строк - Lisp

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

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

Написать и отладить программу, которая на основе шаблона: деятель, действие, объект на который направлено действие, формирует предложения. Словарь по семантическими падежами задавать в среде.

Решение задачи: «Обработка строк»

textual
Листинг программы
(defun generate (patt)
  (dolist (obj! (car *dict*) 'ok)
    (dolist (actor! (cadr *dict*) t)
      (dolist (action! (caddr *dict*) t)
         (dolist (i patt t)
            (cond ((eq i 'actor) (print (cadr actor!))(princ " "))
                  ((eq i 'action) (print (cadr action!))(princ " "))         
                  ((eq i 'obj) (print (cadr obj!))(princ " "))))
            (terpri)))))

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

В данном коде определен функтор generate, который принимает один аргумент patt. Функция обрабатывает строку, представленную в виде списка, используя словарь dict, который, вероятно, содержит соответствующие шаблоны для различных частей строки. Внутри функции происходит три вложенных цикла dolist. Первый из них перебирает элементы словаря dict, представленные в виде списка. Каждый элемент списка, обозначенный как obj!, проходит через два следующих вложенных цикла. Второй вложенный цикл dolist перебирает акторы, представленные в виде списка, связанного с каждым элементом первого вложенного цикла. Третий вложенный цикл dolist перебирает действия, представленные в виде списка, связанного с каждым элементом второго вложенного цикла. Внутри третьего вложенного цикла dolist происходит еще один вложенный цикл dolist, который перебирает шаблонные части строки, представленные в виде списка, связанные с каждым элементом третьего вложенного цикла. Внутри этого вложенного цикла проверяется каждая часть шаблона, обозначенная как i. Если i соответствует 'actor, то выводится значение связанного с ним элемента списка, после чего выводится пробел. Аналогично, если i соответствует 'action, выводится соответствующее значение и пробел. Если i соответствует 'obj, выводится соответствующее значение и пробел. После завершения всех вложенных циклов выводится символ новой строки, который обозначается как terpri.

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


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

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

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