fork download
  1. (defparameter *гласные* '(#\а #\у #\о #\ы #\и #\э #\я #\ю #\ё #\е))
  2. (defparameter *сонорные* '(#\м #\н #\л #\р #\й #\мь #\нь #\ль #\рь)) ;"ь" для мягких согласных
  3. (defparameter *шумные* '(#\б #\в #\г #\д #\ж #\з #\к #\п #\с #\т #\ф #\х #\ц #\ч #\ш #\щ
  4. #\бь #\вь #\гь #\дь #\жь #\зь #\кь #\пь #\сь #\ть #\фь #\хь #\чь #\шь))
  5.  
  6. (defun звучность (символ)
  7. "Определяет звучность символа."
  8. (cond ((member символ *гласные*) 3)
  9. ((member символ *сонорные*) 2)
  10. ((member символ *шумные*) 1)
  11. (t 0))) ; Другие символы (не буквы)
  12.  
  13. (defun разделить-слово (слово)
  14. "Разбивает слово на основе принципа восходящей звучности."
  15. (let ((слоги '())
  16. (текущий-слог '())
  17. (предыдущая-звучность 0))
  18. (loop for символ across слово
  19. do (let ((текущая-звучность (звучность символ)))
  20. (cond
  21. ((= текущая-звучность 0) ;Если символ не буква игнорируем
  22. (format t "Символ ~A не буква, игнорируется~%" символ))
  23.  
  24. ((> текущая-звучность предыдущая-звучность) ; Восходящая звучность
  25. (push символ текущий-слог) )
  26. ((= предыдущая-звучность 0) ;Первый символ
  27. (push символ текущий-слог))
  28. (t
  29. ; Смена слога (не восходящая звучность)
  30. (push (reverse текущий-слог) слоги)
  31. (setf текущий-слог (list символ)))
  32. (setf предыдущая-звучность текущая-звучность))))
  33.  
  34. (when текущий-слог
  35. (push (reverse текущий-слог) слоги))
  36. (reverse (mapcar #'(lambda (слог) (coerce слог 'string)) слоги))))
  37.  
  38. (defun разделить-предложение (предложение)
  39. "Разбивает предложение на слоги."
  40. (mapcar #'разделить-слово предложение))
  41.  
  42. ;; Пример
  43. (let ((предложение '("книга" "иначе" "полотно" "война" "майка" "конспект" "волга" "пушка" "изба")))
  44. (format t "Предложение: ~A~%" предложение)
  45. (format t "Слоги: ~A~%" (разделить-предложение предложение)))
  46.  
  47. (let ((предложение '("электростанция")))
  48. (format t "Предложение: ~A~%" предложение)
  49. (format t "Слоги: ~A~%" (разделить-предложение предложение)))
Runtime error #stdin #stdout #stderr 0.03s 10112KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
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 "мЬ"