Замена слов - Lisp
Формулировка задачи:
список с вложенностью состоящий из строк (каждая строка одно слово) и заменить каждое из слов на ту часть речи к которому оно относится
если заканчивается на ть (глагол)
на й (прилагательное)
если на А (существительное)
рекурсивная обработка
Решение задачи: «Замена слов»
textual
Листинг программы
(defun task (stri)
(mapcar #'(lambda (w)
(cond ((listp w) (task w))
((eq "ть" (strRight w 2)) "глагол")
((eq "й" (strRight w 1)) "прилагательное")
((eq "а" (strRight w 1)) "существительное")
(t w))) stri))
==> task
(task '("мыть" "пилить" ("кошка" "мышка" "ловить") "серый" "белый"))
==> ("глагол" "глагол" ("существительное" "существительное" "глагол") "прилагательное" "прилагательное")
Объяснение кода листинга программы
В данном коде определена функция task, которая принимает в качестве аргумента строку. Внутри функции используется оператор mapcar, который применяет к каждому элементу строки указанную анонимную функцию. Эта функция проверяет каждый элемент строки на соответствие заданным условиям и заменяет его соответствующим словом.
Вот список действий, которые выполняются в данном коде:
- Проверка, является ли элемент строки списком. Если это так, то рекурсивно вызывается функция
taskдля этого элемента. - Проверка, является ли последний символ элемента строки
ть. Если это так, то заменяется наглагол. - Проверка, является ли первый символ элемента строки
й. Если это так, то заменяется наприлагательное. - Проверка, является ли первый символ элемента строки
а. Если это так, то заменяется насуществительное. - Если ни одно из вышеперечисленных условий не выполняется, то элемент оставляется без изменений.
В результате выполнения функции
taskдля строки '(мытьпилить(кошкамышкаловить)серыйбелый)возвращается новая строкаглагол`глагол(существительноесуществительноеглагол)прилагательноеприлагательное.