(defun первый-слог (слово) "Возвращает первый слог слова (упрощенно, до первой гласной)." (loop for char across слово for i from 0 when (member char '(#\а #\у #\о #\ы #\и #\э #\я #\ю #\ё #\е)) do (return (subseq слово 0 (1+ i))))) (defun остаток-слова (слово) "Возвращает часть слова, идущую после первого слога." (let ((первый (первый-слог слово))) (if первый (subseq слово (length первый)) ""))) (defun сплетник-слово (слово ключевое-слово) "Переводит одно слово на 'язык сплетника'." (let ((слог-слова (первый-слог слово)) (слог-ключа (первый-слог ключевое-слово)) (остаток-слова (остаток-слова слово)) (остаток-ключа (остаток-слова ключевое-слово))) (list (concatenate 'string слог-ключа остаток-слова) (concatenate 'string слог-слова остаток-ключа)))) (defun сплетник-предложение (предложение ключевое-слово) "Переводит предложение на 'язык сплетника'." (mapcar #'(lambda (слово) (сплетник-слово слово ключевое-слово)) предложение)) ;; Пример использования: (let ((предложение '("слово" "переводится" "на" "язык" "сплетника")) (ключевое-слово "сплетня")) (format t "Исходное предложение: ~A~%" предложение) (format t "Ключевое слово: ~A~%" ключевое-слово) (format t "Предложение на языке сплетника: ~A~%" (сплетник-предложение предложение ключевое-слово)))
Standard input is empty
Исходное предложение: (слово переводится на язык сплетника) Ключевое слово: сплетня Предложение на языке сплетника: ((сплево слотня) (сплереводится петня) (спле натня) (сплезык ятня) (сплетника сплетня))
Warning: reserving address range 0x80000c0000...0x1fffffffffff that contains memory mappings. clisp might crash later! Memory dump: 0x8000000000 - 0x80000bffff 0x14d7f3c00000 - 0x14d7f3ee4fff 0x14d7f4000000 - 0x14d7f4002fff 0x14d7f4003000 - 0x14d7f4201fff 0x14d7f4202000 - 0x14d7f4202fff 0x14d7f4203000 - 0x14d7f4203fff 0x14d7f4215000 - 0x14d7f4239fff 0x14d7f423a000 - 0x14d7f43acfff 0x14d7f43ad000 - 0x14d7f43f5fff 0x14d7f43f6000 - 0x14d7f43f8fff 0x14d7f43f9000 - 0x14d7f43fbfff 0x14d7f43fc000 - 0x14d7f43fffff 0x14d7f4400000 - 0x14d7f4403fff 0x14d7f4404000 - 0x14d7f4603fff 0x14d7f4604000 - 0x14d7f4604fff 0x14d7f4605000 - 0x14d7f4605fff 0x14d7f4622000 - 0x14d7f4623fff 0x14d7f4624000 - 0x14d7f4633fff 0x14d7f4634000 - 0x14d7f4667fff 0x14d7f4668000 - 0x14d7f479efff 0x14d7f479f000 - 0x14d7f479ffff 0x14d7f47a0000 - 0x14d7f47a2fff 0x14d7f47a3000 - 0x14d7f47a3fff 0x14d7f47a4000 - 0x14d7f47a5fff 0x14d7f47a6000 - 0x14d7f47a6fff 0x14d7f47a7000 - 0x14d7f47a8fff 0x14d7f47a9000 - 0x14d7f47a9fff 0x14d7f47aa000 - 0x14d7f47aafff 0x14d7f47ab000 - 0x14d7f47abfff 0x14d7f47ac000 - 0x14d7f47b9fff 0x14d7f47ba000 - 0x14d7f47c7fff 0x14d7f47c8000 - 0x14d7f47d4fff 0x14d7f47d5000 - 0x14d7f47d8fff 0x14d7f47d9000 - 0x14d7f47d9fff 0x14d7f47da000 - 0x14d7f47dafff 0x14d7f47db000 - 0x14d7f47e0fff 0x14d7f47e1000 - 0x14d7f47e2fff 0x14d7f47e3000 - 0x14d7f47e3fff 0x14d7f47e4000 - 0x14d7f47e4fff 0x14d7f47e5000 - 0x14d7f47e5fff 0x14d7f47e6000 - 0x14d7f4813fff 0x14d7f4814000 - 0x14d7f4822fff 0x14d7f4823000 - 0x14d7f48c8fff 0x14d7f48c9000 - 0x14d7f495ffff 0x14d7f4960000 - 0x14d7f4960fff 0x14d7f4961000 - 0x14d7f4961fff 0x14d7f4962000 - 0x14d7f4975fff 0x14d7f4976000 - 0x14d7f499dfff 0x14d7f499e000 - 0x14d7f49a7fff 0x14d7f49a8000 - 0x14d7f49a9fff 0x14d7f49aa000 - 0x14d7f49affff 0x14d7f49b0000 - 0x14d7f49b2fff 0x14d7f49b5000 - 0x14d7f49b5fff 0x14d7f49b6000 - 0x14d7f49b6fff 0x14d7f49b7000 - 0x14d7f49b7fff 0x14d7f49b8000 - 0x14d7f49b8fff 0x14d7f49b9000 - 0x14d7f49b9fff 0x14d7f49ba000 - 0x14d7f49c0fff 0x14d7f49c1000 - 0x14d7f49c3fff 0x14d7f49c4000 - 0x14d7f49c4fff 0x14d7f49c5000 - 0x14d7f49e5fff 0x14d7f49e6000 - 0x14d7f49edfff 0x14d7f49ee000 - 0x14d7f49eefff 0x14d7f49ef000 - 0x14d7f49effff 0x14d7f49f0000 - 0x14d7f49f0fff 0x560f6d20e000 - 0x560f6d2fefff 0x560f6d2ff000 - 0x560f6d408fff 0x560f6d409000 - 0x560f6d468fff 0x560f6d46a000 - 0x560f6d498fff 0x560f6d499000 - 0x560f6d4c9fff 0x560f6d4ca000 - 0x560f6d4cdfff 0x560f6dbef000 - 0x560f6dc0ffff 0x7ffdda74a000 - 0x7ffdda76afff 0x7ffdda77c000 - 0x7ffdda77ffff 0x7ffdda780000 - 0x7ffdda781fff