;; Функция для проверки, начинается ли слово с заглавной буквы. (defun starts-with-uppercase (word) (and (stringp word) ; Проверка, является ли аргумент строкой. (plusp (length word)) ; Проверка, что строка не пустая. (upper-case-p (char word 0)))) ; Проверка первого символа на верхний регистр ;; Преобразует слово в верхний регистр, если оно начинается с заглавной буквы; ;; иначе возвращает исходное слово. (defun uppercase-if-uppercase (word) (if (starts-with-uppercase word) (string-upcase word) word)) ;; Обрабатывает одно предложение (список слов). Применяет uppercase-if-uppercase к каждому слову. (defun process-sentence (sentence) (mapcar #'uppercase-if-uppercase sentence)) ;; Обрабатывает весь текст (список предложений). Применяет process-sentence к каждому предложению. (defun process-text (text) (mapcar #'process-sentence text)) ;; Функция для тестирования (defun test-process-text (text) (format t "Исходный текст:~%~S~%Обработанный текст:~%~S~%~%" text (process-text text))) ;; Примеры использования (let () (format t "Примеры использования:~%~%") (test-process-text '(("this" "is" "A" "sample" "text") ("Some" "words" "are" "Capitalized" "text"))) (test-process-text '(("Hello" "world"))) (test-process-text '(("hello" "World"))) (test-process-text '(("Hello" "123World"))) (test-process-text '(("Hello" "World" "and" "New" "York"))) (test-process-text '(("The" "End"))) (test-process-text '(("Empty" "" "string"))) ; Пример с пустой строкой (test-process-text '(("Special" "characters!" "Like" "АБВ"))) ; Пример со специальными символами и кириллицей (test-process-text '(("Multiple" "Sentences." "Each" "With" "Capitalized" "Words."))) )
Standard input is empty
Примеры использования:
Исходный текст:
(("this" "is" "A" "sample" "text") ("Some" "words" "are" "Capitalized" "text"))
Обработанный текст:
(("this" "is" "A" "sample" "text") ("SOME" "words" "are" "CAPITALIZED" "text"))
Исходный текст:
(("Hello" "world"))
Обработанный текст:
(("HELLO" "world"))
Исходный текст:
(("hello" "World"))
Обработанный текст:
(("hello" "WORLD"))
Исходный текст:
(("Hello" "123World"))
Обработанный текст:
(("HELLO" "123World"))
Исходный текст:
(("Hello" "World" "and" "New" "York"))
Обработанный текст:
(("HELLO" "WORLD" "and" "NEW" "YORK"))
Исходный текст:
(("The" "End"))
Обработанный текст:
(("THE" "END"))
Исходный текст:
(("Empty" "" "string"))
Обработанный текст:
(("EMPTY" "" "string"))
Исходный текст:
(("Special" "characters!" "Like" "АБВ"))
Обработанный текст:
(("SPECIAL" "characters!" "LIKE" "АБВ"))
Исходный текст:
(("Multiple" "Sentences." "Each" "With" "Capitalized" "Words."))
Обработанный текст:
(("MULTIPLE" "SENTENCES." "EACH" "WITH" "CAPITALIZED" "WORDS."))
Warning: reserving address range 0x80000c0000...0x1fffffffffff that contains memory mappings. clisp might crash later! Memory dump: 0x8000000000 - 0x80000bffff 0x15370ee00000 - 0x15370f0e4fff 0x15370f215000 - 0x15370f239fff 0x15370f23a000 - 0x15370f3acfff 0x15370f3ad000 - 0x15370f3f5fff 0x15370f3f6000 - 0x15370f3f8fff 0x15370f3f9000 - 0x15370f3fbfff 0x15370f3fc000 - 0x15370f3fffff 0x15370f400000 - 0x15370f402fff 0x15370f403000 - 0x15370f601fff 0x15370f602000 - 0x15370f602fff 0x15370f603000 - 0x15370f603fff 0x15370f680000 - 0x15370f68ffff 0x15370f690000 - 0x15370f6c3fff 0x15370f6c4000 - 0x15370f7fafff 0x15370f7fb000 - 0x15370f7fbfff 0x15370f7fc000 - 0x15370f7fefff 0x15370f7ff000 - 0x15370f7fffff 0x15370f800000 - 0x15370f803fff 0x15370f804000 - 0x15370fa03fff 0x15370fa04000 - 0x15370fa04fff 0x15370fa05000 - 0x15370fa05fff 0x15370fb5c000 - 0x15370fb5ffff 0x15370fb60000 - 0x15370fb60fff 0x15370fb61000 - 0x15370fb62fff 0x15370fb63000 - 0x15370fb63fff 0x15370fb64000 - 0x15370fb64fff 0x15370fb65000 - 0x15370fb65fff 0x15370fb66000 - 0x15370fb73fff 0x15370fb74000 - 0x15370fb81fff 0x15370fb82000 - 0x15370fb8efff 0x15370fb8f000 - 0x15370fb92fff 0x15370fb93000 - 0x15370fb93fff 0x15370fb94000 - 0x15370fb94fff 0x15370fb95000 - 0x15370fb9afff 0x15370fb9b000 - 0x15370fb9cfff 0x15370fb9d000 - 0x15370fb9dfff 0x15370fb9e000 - 0x15370fb9efff 0x15370fb9f000 - 0x15370fb9ffff 0x15370fba0000 - 0x15370fbcdfff 0x15370fbce000 - 0x15370fbdcfff 0x15370fbdd000 - 0x15370fc82fff 0x15370fc83000 - 0x15370fd19fff 0x15370fd1a000 - 0x15370fd1afff 0x15370fd1b000 - 0x15370fd1bfff 0x15370fd1c000 - 0x15370fd2ffff 0x15370fd30000 - 0x15370fd57fff 0x15370fd58000 - 0x15370fd61fff 0x15370fd62000 - 0x15370fd63fff 0x15370fd64000 - 0x15370fd69fff 0x15370fd6a000 - 0x15370fd6cfff 0x15370fd6f000 - 0x15370fd6ffff 0x15370fd70000 - 0x15370fd70fff 0x15370fd71000 - 0x15370fd71fff 0x15370fd72000 - 0x15370fd72fff 0x15370fd73000 - 0x15370fd73fff 0x15370fd74000 - 0x15370fd7afff 0x15370fd7b000 - 0x15370fd7dfff 0x15370fd7e000 - 0x15370fd7efff 0x15370fd7f000 - 0x15370fd9ffff 0x15370fda0000 - 0x15370fda7fff 0x15370fda8000 - 0x15370fda8fff 0x15370fda9000 - 0x15370fda9fff 0x15370fdaa000 - 0x15370fdaafff 0x55f7f78b1000 - 0x55f7f79a1fff 0x55f7f79a2000 - 0x55f7f7aabfff 0x55f7f7aac000 - 0x55f7f7b0bfff 0x55f7f7b0d000 - 0x55f7f7b3bfff 0x55f7f7b3c000 - 0x55f7f7b6cfff 0x55f7f7b6d000 - 0x55f7f7b70fff 0x55f7f7bc0000 - 0x55f7f7be0fff 0x7fff9e3af000 - 0x7fff9e3cffff 0x7fff9e3e1000 - 0x7fff9e3e4fff 0x7fff9e3e5000 - 0x7fff9e3e6fff