(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 0x1546c1200000 - 0x1546c14e4fff 0x1546c1615000 - 0x1546c1639fff 0x1546c163a000 - 0x1546c17acfff 0x1546c17ad000 - 0x1546c17f5fff 0x1546c17f6000 - 0x1546c17f8fff 0x1546c17f9000 - 0x1546c17fbfff 0x1546c17fc000 - 0x1546c17fffff 0x1546c1800000 - 0x1546c1802fff 0x1546c1803000 - 0x1546c1a01fff 0x1546c1a02000 - 0x1546c1a02fff 0x1546c1a03000 - 0x1546c1a03fff 0x1546c1a80000 - 0x1546c1a8ffff 0x1546c1a90000 - 0x1546c1ac3fff 0x1546c1ac4000 - 0x1546c1bfafff 0x1546c1bfb000 - 0x1546c1bfbfff 0x1546c1bfc000 - 0x1546c1bfefff 0x1546c1bff000 - 0x1546c1bfffff 0x1546c1c00000 - 0x1546c1c03fff 0x1546c1c04000 - 0x1546c1e03fff 0x1546c1e04000 - 0x1546c1e04fff 0x1546c1e05000 - 0x1546c1e05fff 0x1546c1e73000 - 0x1546c1e76fff 0x1546c1e77000 - 0x1546c1e77fff 0x1546c1e78000 - 0x1546c1e79fff 0x1546c1e7a000 - 0x1546c1e7afff 0x1546c1e7b000 - 0x1546c1e7bfff 0x1546c1e7c000 - 0x1546c1e7cfff 0x1546c1e7d000 - 0x1546c1e8afff 0x1546c1e8b000 - 0x1546c1e98fff 0x1546c1e99000 - 0x1546c1ea5fff 0x1546c1ea6000 - 0x1546c1ea9fff 0x1546c1eaa000 - 0x1546c1eaafff 0x1546c1eab000 - 0x1546c1eabfff 0x1546c1eac000 - 0x1546c1eb1fff 0x1546c1eb2000 - 0x1546c1eb3fff 0x1546c1eb4000 - 0x1546c1eb4fff 0x1546c1eb5000 - 0x1546c1eb5fff 0x1546c1eb6000 - 0x1546c1eb6fff 0x1546c1eb7000 - 0x1546c1ee4fff 0x1546c1ee5000 - 0x1546c1ef3fff 0x1546c1ef4000 - 0x1546c1f99fff 0x1546c1f9a000 - 0x1546c2030fff 0x1546c2031000 - 0x1546c2031fff 0x1546c2032000 - 0x1546c2032fff 0x1546c2033000 - 0x1546c2046fff 0x1546c2047000 - 0x1546c206efff 0x1546c206f000 - 0x1546c2078fff 0x1546c2079000 - 0x1546c207afff 0x1546c207b000 - 0x1546c2080fff 0x1546c2081000 - 0x1546c2083fff 0x1546c2086000 - 0x1546c2086fff 0x1546c2087000 - 0x1546c2087fff 0x1546c2088000 - 0x1546c2088fff 0x1546c2089000 - 0x1546c2089fff 0x1546c208a000 - 0x1546c208afff 0x1546c208b000 - 0x1546c2091fff 0x1546c2092000 - 0x1546c2094fff 0x1546c2095000 - 0x1546c2095fff 0x1546c2096000 - 0x1546c20b6fff 0x1546c20b7000 - 0x1546c20befff 0x1546c20bf000 - 0x1546c20bffff 0x1546c20c0000 - 0x1546c20c0fff 0x1546c20c1000 - 0x1546c20c1fff 0x5596031bd000 - 0x5596032adfff 0x5596032ae000 - 0x5596033b7fff 0x5596033b8000 - 0x559603417fff 0x559603419000 - 0x559603447fff 0x559603448000 - 0x559603478fff 0x559603479000 - 0x55960347cfff 0x5596052cc000 - 0x5596052ecfff 0x7ffc301e4000 - 0x7ffc30204fff 0x7ffc30283000 - 0x7ffc30286fff 0x7ffc30287000 - 0x7ffc30288fff