;; Гласные буквы русского языка
(defun vowel-p (char)
(member char '(#\а #\е #\ё #\и #\о #\у #\ы #\э #\ю #\я
#\А #\Е #\Ё #\И #\О #\У #\Ы #\Э #\Ю #\Я)
:test #'char=))
;; Разбиение слова на слоги по правилам русского языка
(defun split-word (word)
(let ((chars (coerce word 'list))
(syllables nil)
(current nil))
(dolist (ch chars)
(push ch current)
(when (vowel-p ch)
(push (coerce (reverse current) 'string) syllables)
(setf current nil)))
(when current
(if syllables
(setf (car syllables)
(concatenate 'string (car syllables)
(coerce (reverse current) 'string)))
(push (coerce (reverse current) 'string) syllables)))
(reverse syllables)))
;; Разбиение строки на слова
(defun split-string (str)
(let ((words nil) (current nil))
(dotimes (i (length str))
(let ((ch (char str i)))
(if (char= ch #\Space)
(when current
(push (coerce (reverse current) 'string) words)
(setf current nil))
(push ch current))))
(when current
(push (coerce (reverse current) 'string) words))
(reverse words)))
;; Главная функция с использованием MAPCAR
(defun split-phrase (phrase)
(mapcar #'split-word (split-string phrase)))
;; Тест
(print (split-phrase "написать программу "))