Заменить в каждом предложении все вхождения заданного слова на заданное новое слово - Lisp
Формулировка задачи:
Добрый день! Помогите решить:
Дан текст. Заменить в каждом предложении все вхождения заданного слова на заданное новое слово.
Есть прога которая считает одинаковые символы:
(defun num-substr
(a s &optional (m (length a)) (z 0) &aux (n (search a s)))
(if n (num-substr a (subseq s (+ n m)) m (1+ z)) z))
CL-USER 1 > (num-substr "a" "banana")
3Решение задачи: «Заменить в каждом предложении все вхождения заданного слова на заданное новое слово»
textual
Листинг программы
(defun substitute-word (z a s)
(format nil "~{~a~^ ~}"
(substitute
(read-from-string z)
(read-from-string a)
(read-from-string
(concatenate 'string "(" s ")")))))
> (substitute-word "zz" "aa" "aa bb aa")
"ZZ BB ZZ"
Объяснение кода листинга программы
В коде определена функция substitute-word. Она принимает три аргумента: z, a и s.
- В строке с форматом
nilиспользуется функцияformatдля вывода результата замены слова. - В функции
substituteпроисходит замена слова в строкеs. - В функции
read-from-stringпроисходит чтение строки из-за кавычек в коде. - В результате
concatenateполучается строка(s)(s)``. - Результат замены выводится на экран.