Написать программу, которая вставляет в текст слово после указанного слова - Lisp
Формулировка задачи:
Решение задачи: «Написать программу, которая вставляет в текст слово после указанного слова»
(defun insert-word (s p r &aux (e (search p s))) (cond ((null e) s) ((concatenate 'string (subseq s 0 e) p " " r (insert-word (subseq s (+ e (length p))) p r))))) > (insert-word "To be or not to be" "be" "beer") "To be beer or not to be beer" > (insert-word "To bbbe" "be" "beer") "To bbbe beer"
Объяснение кода листинга программы
В данном коде представлена функция insert-word, которая принимает на вход три аргумента: s (исходный текст), p (слово, после которого необходимо вставить новое слово) и r (новое слово).
Функция ищет позицию указанного слова p в тексте s с помощью встроенной функции search. Затем, используя функцию concatenate, она вставляет новое слово r после найденного слова p в тексте s.
Если указанное слово p не найдено в тексте s, то функция возвращает исходный текст s.
Если слово p найдено в тексте s, то функция рекурсивно вызывает саму себя с новыми аргументами: (subseq s (+ e (length p))) — это следующий фрагмент текста после найденного слова p, p — это само найденное слово, и r — это новое слово.
Таким образом, функция продолжает работу до тех пор, пока не будет достигнута конечная позиция в тексте s, после чего возвращает результат.
Примеры использования функции insert-word:
(insert-wordTo be or not to be`bebeer)— в результате получим строкуTo be beer or not to be beer`.(insert-wordTo bbbe`bebeer)— в результате получим строкуTo bbbe beer`.