(defparameter *гласные* '(#\а #\у #\о #\ы #\и #\э #\я #\ю #\ё #\е)) (defparameter *сонорные* '(#\м #\н #\л #\р #\й #\мь #\нь #\ль #\рь)) ;"ь" для мягких согласных (defparameter *шумные* '(#\б #\в #\г #\д #\ж #\з #\к #\п #\с #\т #\ф #\х #\ц #\ч #\ш #\щ #\бь #\вь #\гь #\дь #\жь #\зь #\кь #\пь #\сь #\ть #\фь #\хь #\чь #\шь)) (defun звучность (символ) "Определяет звучность символа." (cond ((member символ *гласные*) 3) ((member символ *сонорные*) 2) ((member символ *шумные*) 1) (t 0))) ; Другие символы (не буквы) (defun разделить-слово (слово) "Разбивает слово на основе принципа восходящей звучности." (let ((слоги '()) (текущий-слог '()) (предыдущая-звучность 0)) (loop for символ across слово do (let ((текущая-звучность (звучность символ))) (cond ((= текущая-звучность 0) ;Если символ не буква игнорируем (format t "Символ ~A не буква, игнорируется~%" символ)) ((> текущая-звучность предыдущая-звучность) ; Восходящая звучность (push символ текущий-слог) ) ((= предыдущая-звучность 0) ;Первый символ (push символ текущий-слог)) (t ; Смена слога (не восходящая звучность) (push (reverse текущий-слог) слоги) (setf текущий-слог (list символ))) (setf предыдущая-звучность текущая-звучность)))) (when текущий-слог (push (reverse текущий-слог) слоги)) (reverse (mapcar #'(lambda (слог) (coerce слог 'string)) слоги)))) (defun разделить-предложение (предложение) "Разбивает предложение на слоги." (mapcar #'разделить-слово предложение)) ;; Пример (let ((предложение '("книга" "иначе" "полотно" "война" "майка" "конспект" "волга" "пушка" "изба"))) (format t "Предложение: ~A~%" предложение) (format t "Слоги: ~A~%" (разделить-предложение предложение))) (let ((предложение '("электростанция"))) (format t "Предложение: ~A~%" предложение) (format t "Слоги: ~A~%" (разделить-предложение предложение)))
Standard input is empty
Standard output is empty
Warning: reserving address range 0x80000c0000...0x1fffffffffff that contains memory mappings. clisp might crash later!
Memory dump:
0x8000000000 - 0x80000bffff
0x1536fc800000 - 0x1536fcae4fff
0x1536fcc15000 - 0x1536fcc39fff
0x1536fcc3a000 - 0x1536fcdacfff
0x1536fcdad000 - 0x1536fcdf5fff
0x1536fcdf6000 - 0x1536fcdf8fff
0x1536fcdf9000 - 0x1536fcdfbfff
0x1536fcdfc000 - 0x1536fcdfffff
0x1536fce00000 - 0x1536fce02fff
0x1536fce03000 - 0x1536fd001fff
0x1536fd002000 - 0x1536fd002fff
0x1536fd003000 - 0x1536fd003fff
0x1536fd080000 - 0x1536fd08ffff
0x1536fd090000 - 0x1536fd0c3fff
0x1536fd0c4000 - 0x1536fd1fafff
0x1536fd1fb000 - 0x1536fd1fbfff
0x1536fd1fc000 - 0x1536fd1fefff
0x1536fd1ff000 - 0x1536fd1fffff
0x1536fd200000 - 0x1536fd203fff
0x1536fd204000 - 0x1536fd403fff
0x1536fd404000 - 0x1536fd404fff
0x1536fd405000 - 0x1536fd405fff
0x1536fd486000 - 0x1536fd489fff
0x1536fd48a000 - 0x1536fd48afff
0x1536fd48b000 - 0x1536fd48cfff
0x1536fd48d000 - 0x1536fd48dfff
0x1536fd48e000 - 0x1536fd48efff
0x1536fd48f000 - 0x1536fd48ffff
0x1536fd490000 - 0x1536fd49dfff
0x1536fd49e000 - 0x1536fd4abfff
0x1536fd4ac000 - 0x1536fd4b8fff
0x1536fd4b9000 - 0x1536fd4bcfff
0x1536fd4bd000 - 0x1536fd4bdfff
0x1536fd4be000 - 0x1536fd4befff
0x1536fd4bf000 - 0x1536fd4c4fff
0x1536fd4c5000 - 0x1536fd4c6fff
0x1536fd4c7000 - 0x1536fd4c7fff
0x1536fd4c8000 - 0x1536fd4c8fff
0x1536fd4c9000 - 0x1536fd4c9fff
0x1536fd4ca000 - 0x1536fd4f7fff
0x1536fd4f8000 - 0x1536fd506fff
0x1536fd507000 - 0x1536fd5acfff
0x1536fd5ad000 - 0x1536fd643fff
0x1536fd644000 - 0x1536fd644fff
0x1536fd645000 - 0x1536fd645fff
0x1536fd646000 - 0x1536fd659fff
0x1536fd65a000 - 0x1536fd681fff
0x1536fd682000 - 0x1536fd68bfff
0x1536fd68c000 - 0x1536fd68dfff
0x1536fd68e000 - 0x1536fd693fff
0x1536fd694000 - 0x1536fd696fff
0x1536fd699000 - 0x1536fd699fff
0x1536fd69a000 - 0x1536fd69afff
0x1536fd69b000 - 0x1536fd69bfff
0x1536fd69c000 - 0x1536fd69cfff
0x1536fd69d000 - 0x1536fd69dfff
0x1536fd69e000 - 0x1536fd6a4fff
0x1536fd6a5000 - 0x1536fd6a7fff
0x1536fd6a8000 - 0x1536fd6a8fff
0x1536fd6a9000 - 0x1536fd6c9fff
0x1536fd6ca000 - 0x1536fd6d1fff
0x1536fd6d2000 - 0x1536fd6d2fff
0x1536fd6d3000 - 0x1536fd6d3fff
0x1536fd6d4000 - 0x1536fd6d4fff
0x557925fb7000 - 0x5579260a7fff
0x5579260a8000 - 0x5579261b1fff
0x5579261b2000 - 0x557926211fff
0x557926213000 - 0x557926241fff
0x557926242000 - 0x557926272fff
0x557926273000 - 0x557926276fff
0x557927e71000 - 0x557927e91fff
0x7ffe44ba1000 - 0x7ffe44bc1fff
0x7ffe44bd0000 - 0x7ffe44bd3fff
0x7ffe44bd4000 - 0x7ffe44bd5fff
*** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"prog.lisp" @2>:
there is no character with name "мЬ"