(defun first-syllable (word) "Возвращает первый слог слова (более корректно)." (let ((vowels '(#\а #\у #\о #\ы #\и #\э #\я #\ю #\ё #\е)) (consonants '(#\б #\в #\г #\д #\ж #\з #\й #\к #\л #\м #\н #\п #\р #\с #\т #\ф #\х #\ц #\ч #\ш #\щ))) (loop for i from 0 below (length word) for char = (char word i) if (member char vowels) do (return (subseq word 0 (1+ i))) finally (return (subseq word 0))))) ; Если гласных нет, вернуть все слово (defun word-remainder (word) "Возвращает часть слова, идущую после первого слога." (let ((first (first-syllable word))) (if first (subseq word (length first)) ""))) (defun gossip-word (word keyword) "Переводит одно слово на 'язык сплетника'." (let ((word-syllable (first-syllable word)) (keyword-syllable (first-syllable keyword)) (word-remainder (word-remainder word)) (keyword-remainder (word-remainder keyword))) (list (concatenate 'string (if keyword-syllable keyword-syllable "") word-remainder) (concatenate 'string (if word-syllable word-syllable "") keyword-remainder)))) (defun gossip-sentence (sentence keyword) "Переводит предложение на 'язык сплетника'." (mapcar #'(lambda (word) (gossip-word word keyword)) sentence)) (defun safe-string (arg) "Преобразует символ или число в строку, или возвращает строку без изменений." (cond ((stringp arg) arg) ((symbolp arg) (symbol-name arg)) ((numberp arg) (write-to-string arg)) (t ""))) (defun gossip-sentence-safe (sentence keyword) "Безопасная версия для разнородных списков и отсутствия слов." (let ((keyword-str (safe-string keyword))) (mapcar #'(lambda (word) (gossip-word (safe-string word) keyword-str)) sentence))) ;; Example usage: (let ((sentence '("слово" "переводится" "" 123 :символ nil "на" "язык" "сплетника")) (keyword "сплетня")) (format t "Исходное предложение: ~A~%" sentence) (format t "Ключевое слово: ~A~%" keyword) (format t "Предложение на языке сплетника: ~A~%" (gossip-sentence-safe sentence keyword))) (let ((sentence '("отговорила" "роща" "золотая")) (keyword "кумир")) (format t "Исходное предложение: ~A~%" sentence) (format t "Ключевое слово: ~A~%" keyword) (format t "Предложение на языке сплетника: ~A~%" (gossip-sentence sentence keyword))) (let ((sentence '("написать" "программу" "обработки" "текста")) (keyword "сплетня")) (format t "Исходное предложение: ~A~%" sentence) (format t "Ключевое слово: ~A~%" keyword) (format t "Предложение на языке сплетника: ~A~%" (gossip-sentence sentence keyword)))
Standard input is empty
Исходное предложение: (слово переводится 123 СИМВОЛ NIL на язык сплетника) Ключевое слово: сплетня Предложение на языке сплетника: ((сплево слотня) (сплереводится петня) (спле тня) (спле 123тня) (спле СИМВОЛтня) (спле NILтня) (спле натня) (сплезык ятня) (сплетника сплетня)) Исходное предложение: (отговорила роща золотая) Ключевое слово: кумир Предложение на языке сплетника: ((кутговорила омир) (куща ромир) (кулотая зомир)) Исходное предложение: (написать программу обработки текста) Ключевое слово: сплетня Предложение на языке сплетника: ((сплеписать натня) (сплеграмму протня) (сплебработки отня) (сплекста тетня))
Warning: reserving address range 0x80000c0000...0x1fffffffffff that contains memory mappings. clisp might crash later! Memory dump: 0x8000000000 - 0x80000bffff 0x149eaa600000 - 0x149eaa8e4fff 0x149eaaa00000 - 0x149eaaa02fff 0x149eaaa03000 - 0x149eaac01fff 0x149eaac02000 - 0x149eaac02fff 0x149eaac03000 - 0x149eaac03fff 0x149eaac15000 - 0x149eaac39fff 0x149eaac3a000 - 0x149eaadacfff 0x149eaadad000 - 0x149eaadf5fff 0x149eaadf6000 - 0x149eaadf8fff 0x149eaadf9000 - 0x149eaadfbfff 0x149eaadfc000 - 0x149eaadfffff 0x149eaae00000 - 0x149eaae03fff 0x149eaae04000 - 0x149eab003fff 0x149eab004000 - 0x149eab004fff 0x149eab005000 - 0x149eab005fff 0x149eab064000 - 0x149eab065fff 0x149eab066000 - 0x149eab075fff 0x149eab076000 - 0x149eab0a9fff 0x149eab0aa000 - 0x149eab1e0fff 0x149eab1e1000 - 0x149eab1e1fff 0x149eab1e2000 - 0x149eab1e4fff 0x149eab1e5000 - 0x149eab1e5fff 0x149eab1e6000 - 0x149eab1e7fff 0x149eab1e8000 - 0x149eab1e8fff 0x149eab1e9000 - 0x149eab1eafff 0x149eab1eb000 - 0x149eab1ebfff 0x149eab1ec000 - 0x149eab1ecfff 0x149eab1ed000 - 0x149eab1edfff 0x149eab1ee000 - 0x149eab1fbfff 0x149eab1fc000 - 0x149eab209fff 0x149eab20a000 - 0x149eab216fff 0x149eab217000 - 0x149eab21afff 0x149eab21b000 - 0x149eab21bfff 0x149eab21c000 - 0x149eab21cfff 0x149eab21d000 - 0x149eab222fff 0x149eab223000 - 0x149eab224fff 0x149eab225000 - 0x149eab225fff 0x149eab226000 - 0x149eab226fff 0x149eab227000 - 0x149eab227fff 0x149eab228000 - 0x149eab255fff 0x149eab256000 - 0x149eab264fff 0x149eab265000 - 0x149eab30afff 0x149eab30b000 - 0x149eab3a1fff 0x149eab3a2000 - 0x149eab3a2fff 0x149eab3a3000 - 0x149eab3a3fff 0x149eab3a4000 - 0x149eab3b7fff 0x149eab3b8000 - 0x149eab3dffff 0x149eab3e0000 - 0x149eab3e9fff 0x149eab3ea000 - 0x149eab3ebfff 0x149eab3ec000 - 0x149eab3f1fff 0x149eab3f2000 - 0x149eab3f4fff 0x149eab3f7000 - 0x149eab3f7fff 0x149eab3f8000 - 0x149eab3f8fff 0x149eab3f9000 - 0x149eab3f9fff 0x149eab3fa000 - 0x149eab3fafff 0x149eab3fb000 - 0x149eab3fbfff 0x149eab3fc000 - 0x149eab402fff 0x149eab403000 - 0x149eab405fff 0x149eab406000 - 0x149eab406fff 0x149eab407000 - 0x149eab427fff 0x149eab428000 - 0x149eab42ffff 0x149eab430000 - 0x149eab430fff 0x149eab431000 - 0x149eab431fff 0x149eab432000 - 0x149eab432fff 0x55d843319000 - 0x55d843409fff 0x55d84340a000 - 0x55d843513fff 0x55d843514000 - 0x55d843573fff 0x55d843575000 - 0x55d8435a3fff 0x55d8435a4000 - 0x55d8435d4fff 0x55d8435d5000 - 0x55d8435d8fff 0x55d845418000 - 0x55d845438fff 0x7ffd5b4c1000 - 0x7ffd5b4e1fff 0x7ffd5b4fa000 - 0x7ffd5b4fdfff 0x7ffd5b4fe000 - 0x7ffd5b4fffff