Определить слова, совпадающие с последним словом строки - Lisp
Формулировка задачи:
Есть строка. Определить слова,которые совпадают с последним словом.
Проблема в том, что не знаю как найти в строке слово.
Решение задачи: «Определить слова, совпадающие с последним словом строки»
textual
Листинг программы
(defun task (txt) (let* ((ws (strWords txt)) (lw (car (last ws)))) (iter (for a in (butlast ws)) (for i upfrom 1) (when (eq a lw) (printsline (strCat "Слово " lw " найдено на " (fix2str i) "-м месте")))))) ==> TASK (task "To be or not to be") Слово be найдено на 2-м месте ==> NIL
Объяснение кода листинга программы
В данном коде определена функция task, которая принимает в качестве аргумента строку txt. Внутри функции создается список слов из данной строки с помощью функции strWords, и сохраняется в переменную ws. Затем из списка ws извлекается последнее слово, сохраняется в переменную lw.
Далее, с помощью цикла iter происходит итерация по списку ws, начиная с первого слова (так как используется for i upfrom 1). При каждом проходе цикла проверяется равенство текущего слова a последнему слову lw с помощью функции eq. Если равенство найдено, то с помощью функции printsline выводится сообщение вида Слово be найдено на 2-м месте.
В конце функции возвращается nil.
Примеры использования функции:
- (task
To be or not to be)Слово be найдено на 2-м месте - (task
Lorem Ipsum is simply dummy text of the printing and typesetting industry.)Слово Ipsum найдено на 5-м месте