;;; Глобальные константы (defconstant +glasn+ '(#\А #\Е #\Ё #\И #\О #\У #\Ы #\Э #\Ю #\Я #\а #\е #\ё #\и #\о #\у #\ы #\э #\ю #\я) "Список гласных букв") (defconstant +sonorn+ '(#\Л #\М #\Н #\Р #\л #\м #\н #\р #\Й #\й) "Список сонорных согласных букв") ;;; Проверка гласной (defun glasn (char) (member char +glasn+ :test #'char-equal)) ;;; Проверка сонорного согласного (defun sonorn (char) (member char +sonorn+ :test #'char-equal)) ;;; Проверка шумного согласного (не гласная и не сонорная) (defun shumn (char) (and (characterp char) (not (glasn char)) (not (sonorn char)))) ;;; Разбиение слова на слоги (упрощённый и исправленный вариант) (defun razbit-na-slogi (word) (let ((slogi '()) (current-slog '())) (labels ((add-slog () (when current-slog (push (coerce (nreverse current-slog) 'string) slogi) (setf current-slog '())))) (dotimes (i (length word)) (let ((char (char word i))) (push char current-slog) (when (glasn char) (if (<= (length current-slog) 1) (add-slog) (let* ((rev-slog (reverse current-slog)) (last1 (nth 0 rev-slog)) ; последний символ (гласная) (last2 (nth 1 rev-slog))) ; предпоследний символ (cond ;; Два шумных подряд - последний переходит в следующий слог ((and (shumn last1) (shumn last2)) (push last1 rev-slog) ;; возвращаем последний назад (setf current-slog (list last1)) (add-slog)) ;; Два сонорных подряд, кроме 'й' - последний переходит в следующий слог ((and (sonorn last1) (sonorn last2) (not (char-equal last1 #\й))) (push last1 rev-slog) (setf current-slog (list last1)) (add-slog)) ;; Иначе разделяем здесь (t (add-slog)))))))) ;; Добавляем последний слог, если остался (when current-slog (push (coerce (nreverse current-slog) 'string) slogi)) ;; Возвращаем слоги в правильном порядке (nreverse slogi)))) (razbit-na-slogi "программа") ;; => ("про" "гра" "мма") (razbit-na-slogi "словарь") ;; => ("сло" "варь")
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 0x153d7b000000 - 0x153d7b2e4fff 0x153d7b415000 - 0x153d7b439fff 0x153d7b43a000 - 0x153d7b5acfff 0x153d7b5ad000 - 0x153d7b5f5fff 0x153d7b5f6000 - 0x153d7b5f8fff 0x153d7b5f9000 - 0x153d7b5fbfff 0x153d7b5fc000 - 0x153d7b5fffff 0x153d7b600000 - 0x153d7b602fff 0x153d7b603000 - 0x153d7b801fff 0x153d7b802000 - 0x153d7b802fff 0x153d7b803000 - 0x153d7b803fff 0x153d7b880000 - 0x153d7b88ffff 0x153d7b890000 - 0x153d7b8c3fff 0x153d7b8c4000 - 0x153d7b9fafff 0x153d7b9fb000 - 0x153d7b9fbfff 0x153d7b9fc000 - 0x153d7b9fefff 0x153d7b9ff000 - 0x153d7b9fffff 0x153d7ba00000 - 0x153d7ba03fff 0x153d7ba04000 - 0x153d7bc03fff 0x153d7bc04000 - 0x153d7bc04fff 0x153d7bc05000 - 0x153d7bc05fff 0x153d7bcd2000 - 0x153d7bcd5fff 0x153d7bcd6000 - 0x153d7bcd6fff 0x153d7bcd7000 - 0x153d7bcd8fff 0x153d7bcd9000 - 0x153d7bcd9fff 0x153d7bcda000 - 0x153d7bcdafff 0x153d7bcdb000 - 0x153d7bcdbfff 0x153d7bcdc000 - 0x153d7bce9fff 0x153d7bcea000 - 0x153d7bcf7fff 0x153d7bcf8000 - 0x153d7bd04fff 0x153d7bd05000 - 0x153d7bd08fff 0x153d7bd09000 - 0x153d7bd09fff 0x153d7bd0a000 - 0x153d7bd0afff 0x153d7bd0b000 - 0x153d7bd10fff 0x153d7bd11000 - 0x153d7bd12fff 0x153d7bd13000 - 0x153d7bd13fff 0x153d7bd14000 - 0x153d7bd14fff 0x153d7bd15000 - 0x153d7bd15fff 0x153d7bd16000 - 0x153d7bd43fff 0x153d7bd44000 - 0x153d7bd52fff 0x153d7bd53000 - 0x153d7bdf8fff 0x153d7bdf9000 - 0x153d7be8ffff 0x153d7be90000 - 0x153d7be90fff 0x153d7be91000 - 0x153d7be91fff 0x153d7be92000 - 0x153d7bea5fff 0x153d7bea6000 - 0x153d7becdfff 0x153d7bece000 - 0x153d7bed7fff 0x153d7bed8000 - 0x153d7bed9fff 0x153d7beda000 - 0x153d7bedffff 0x153d7bee0000 - 0x153d7bee2fff 0x153d7bee5000 - 0x153d7bee5fff 0x153d7bee6000 - 0x153d7bee6fff 0x153d7bee7000 - 0x153d7bee7fff 0x153d7bee8000 - 0x153d7bee8fff 0x153d7bee9000 - 0x153d7bee9fff 0x153d7beea000 - 0x153d7bef0fff 0x153d7bef1000 - 0x153d7bef3fff 0x153d7bef4000 - 0x153d7bef4fff 0x153d7bef5000 - 0x153d7bf15fff 0x153d7bf16000 - 0x153d7bf1dfff 0x153d7bf1e000 - 0x153d7bf1efff 0x153d7bf1f000 - 0x153d7bf1ffff 0x153d7bf20000 - 0x153d7bf20fff 0x560ba4c14000 - 0x560ba4d04fff 0x560ba4d05000 - 0x560ba4e0efff 0x560ba4e0f000 - 0x560ba4e6efff 0x560ba4e70000 - 0x560ba4e9efff 0x560ba4e9f000 - 0x560ba4ecffff 0x560ba4ed0000 - 0x560ba4ed3fff 0x560ba69a7000 - 0x560ba69c7fff 0x7ffe1d9fd000 - 0x7ffe1da1dfff 0x7ffe1dacf000 - 0x7ffe1dad2fff 0x7ffe1dad3000 - 0x7ffe1dad4fff