(defun vowel-p (char) (member char '(#\а #\е #\ё #\и #\о #\у #\ы #\э #\ю #\я #\А #\Е #\Ё #\И #\О #\У #\Ы #\Э #\Ю #\Я) :test #'char=)) (defun split-word (word) (labels ((split-chars (chars current syllables) (if (null chars) (if current (if syllables (reverse (cons (concatenate 'string (car syllables) (coerce (reverse current) 'string)) (cdr syllables))) (list (coerce (reverse current) 'string))) (reverse syllables)) (let ((ch (car chars))) (if (vowel-p ch) (split-chars (cdr chars) nil (cons (coerce (reverse (cons ch current)) 'string) syllables)) (split-chars (cdr chars) (cons ch current) syllables)))))) (split-chars (coerce word 'list) nil nil))) (defun split-string (str) (labels ((split-chars (i current words) (if (>= i (length str)) (if current (reverse (cons (coerce (reverse current) 'string) words)) (reverse words)) (let ((ch (char str i))) (if (char= ch #\Space) (if current (split-chars (+ i 1) nil (cons (coerce (reverse current) 'string) words)) (split-chars (+ i 1) nil words)) (split-chars (+ i 1) (cons ch current) words)))))) (split-chars 0 nil nil))) (defun split-phrase (phrase) (mapcar #'split-word (split-string phrase))) (print (split-phrase "функциональное программирование")) (print (split-phrase "написать программу")) (print (split-phrase "дана фраза на русском языке")) (print (split-phrase " эвакуатор импровизация" )) (print (split-phrase "коллекция чай" )) (print (split-phrase "строка слово текст"))
Standard input is empty
(("фу" "нкци" "о" "на" "льно" "е") ("про" "гра" "мми" "ро" "ва" "ни" "е"))
(("на" "пи" "сать") ("про" "гра" "мму"))
(("да" "на") ("фра" "за") ("на") ("ру" "сском") ("я" "зы" "ке"))
(("э" "ва" "ку" "а" "тор") ("и" "мпро" "ви" "за" "ци" "я"))
(("ко" "лле" "кци" "я") ("чай"))
(("стро" "ка") ("сло" "во") ("текст"))
Warning: reserving address range 0x80000c0000...0x1fffffffffff that contains memory mappings. clisp might crash later! Memory dump: 0x8000000000 - 0x80000bffff 0x14ff69200000 - 0x14ff694e4fff 0x14ff69615000 - 0x14ff69639fff 0x14ff6963a000 - 0x14ff697acfff 0x14ff697ad000 - 0x14ff697f5fff 0x14ff697f6000 - 0x14ff697f8fff 0x14ff697f9000 - 0x14ff697fbfff 0x14ff697fc000 - 0x14ff697fffff 0x14ff69800000 - 0x14ff69802fff 0x14ff69803000 - 0x14ff69a01fff 0x14ff69a02000 - 0x14ff69a02fff 0x14ff69a03000 - 0x14ff69a03fff 0x14ff69a80000 - 0x14ff69a8ffff 0x14ff69a90000 - 0x14ff69ac3fff 0x14ff69ac4000 - 0x14ff69bfafff 0x14ff69bfb000 - 0x14ff69bfbfff 0x14ff69bfc000 - 0x14ff69bfefff 0x14ff69bff000 - 0x14ff69bfffff 0x14ff69c00000 - 0x14ff69c03fff 0x14ff69c04000 - 0x14ff69e03fff 0x14ff69e04000 - 0x14ff69e04fff 0x14ff69e05000 - 0x14ff69e05fff 0x14ff69ec5000 - 0x14ff69ec8fff 0x14ff69ec9000 - 0x14ff69ec9fff 0x14ff69eca000 - 0x14ff69ecbfff 0x14ff69ecc000 - 0x14ff69eccfff 0x14ff69ecd000 - 0x14ff69ecdfff 0x14ff69ece000 - 0x14ff69ecefff 0x14ff69ecf000 - 0x14ff69edcfff 0x14ff69edd000 - 0x14ff69eeafff 0x14ff69eeb000 - 0x14ff69ef7fff 0x14ff69ef8000 - 0x14ff69efbfff 0x14ff69efc000 - 0x14ff69efcfff 0x14ff69efd000 - 0x14ff69efdfff 0x14ff69efe000 - 0x14ff69f03fff 0x14ff69f04000 - 0x14ff69f05fff 0x14ff69f06000 - 0x14ff69f06fff 0x14ff69f07000 - 0x14ff69f07fff 0x14ff69f08000 - 0x14ff69f08fff 0x14ff69f09000 - 0x14ff69f36fff 0x14ff69f37000 - 0x14ff69f45fff 0x14ff69f46000 - 0x14ff69febfff 0x14ff69fec000 - 0x14ff6a082fff 0x14ff6a083000 - 0x14ff6a083fff 0x14ff6a084000 - 0x14ff6a084fff 0x14ff6a085000 - 0x14ff6a098fff 0x14ff6a099000 - 0x14ff6a0c0fff 0x14ff6a0c1000 - 0x14ff6a0cafff 0x14ff6a0cb000 - 0x14ff6a0ccfff 0x14ff6a0cd000 - 0x14ff6a0d2fff 0x14ff6a0d3000 - 0x14ff6a0d5fff 0x14ff6a0d8000 - 0x14ff6a0d8fff 0x14ff6a0d9000 - 0x14ff6a0d9fff 0x14ff6a0da000 - 0x14ff6a0dafff 0x14ff6a0db000 - 0x14ff6a0dbfff 0x14ff6a0dc000 - 0x14ff6a0dcfff 0x14ff6a0dd000 - 0x14ff6a0e3fff 0x14ff6a0e4000 - 0x14ff6a0e6fff 0x14ff6a0e7000 - 0x14ff6a0e7fff 0x14ff6a0e8000 - 0x14ff6a108fff 0x14ff6a109000 - 0x14ff6a110fff 0x14ff6a111000 - 0x14ff6a111fff 0x14ff6a112000 - 0x14ff6a112fff 0x14ff6a113000 - 0x14ff6a113fff 0x558c9f18d000 - 0x558c9f27dfff 0x558c9f27e000 - 0x558c9f387fff 0x558c9f388000 - 0x558c9f3e7fff 0x558c9f3e9000 - 0x558c9f417fff 0x558c9f418000 - 0x558c9f448fff 0x558c9f449000 - 0x558c9f44cfff 0x558c9f682000 - 0x558c9f6a2fff 0x7ffd7d4de000 - 0x7ffd7d4fefff 0x7ffd7d5b3000 - 0x7ffd7d5b6fff 0x7ffd7d5b7000 - 0x7ffd7d5b8fff