(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 0x149dd8400000 - 0x149dd86e4fff 0x149dd8815000 - 0x149dd8839fff 0x149dd883a000 - 0x149dd89acfff 0x149dd89ad000 - 0x149dd89f5fff 0x149dd89f6000 - 0x149dd89f8fff 0x149dd89f9000 - 0x149dd89fbfff 0x149dd89fc000 - 0x149dd89fffff 0x149dd8a00000 - 0x149dd8a02fff 0x149dd8a03000 - 0x149dd8c01fff 0x149dd8c02000 - 0x149dd8c02fff 0x149dd8c03000 - 0x149dd8c03fff 0x149dd8c80000 - 0x149dd8c8ffff 0x149dd8c90000 - 0x149dd8cc3fff 0x149dd8cc4000 - 0x149dd8dfafff 0x149dd8dfb000 - 0x149dd8dfbfff 0x149dd8dfc000 - 0x149dd8dfefff 0x149dd8dff000 - 0x149dd8dfffff 0x149dd8e00000 - 0x149dd8e03fff 0x149dd8e04000 - 0x149dd9003fff 0x149dd9004000 - 0x149dd9004fff 0x149dd9005000 - 0x149dd9005fff 0x149dd90bc000 - 0x149dd90bffff 0x149dd90c0000 - 0x149dd90c0fff 0x149dd90c1000 - 0x149dd90c2fff 0x149dd90c3000 - 0x149dd90c3fff 0x149dd90c4000 - 0x149dd90c4fff 0x149dd90c5000 - 0x149dd90c5fff 0x149dd90c6000 - 0x149dd90d3fff 0x149dd90d4000 - 0x149dd90e1fff 0x149dd90e2000 - 0x149dd90eefff 0x149dd90ef000 - 0x149dd90f2fff 0x149dd90f3000 - 0x149dd90f3fff 0x149dd90f4000 - 0x149dd90f4fff 0x149dd90f5000 - 0x149dd90fafff 0x149dd90fb000 - 0x149dd90fcfff 0x149dd90fd000 - 0x149dd90fdfff 0x149dd90fe000 - 0x149dd90fefff 0x149dd90ff000 - 0x149dd90fffff 0x149dd9100000 - 0x149dd912dfff 0x149dd912e000 - 0x149dd913cfff 0x149dd913d000 - 0x149dd91e2fff 0x149dd91e3000 - 0x149dd9279fff 0x149dd927a000 - 0x149dd927afff 0x149dd927b000 - 0x149dd927bfff 0x149dd927c000 - 0x149dd928ffff 0x149dd9290000 - 0x149dd92b7fff 0x149dd92b8000 - 0x149dd92c1fff 0x149dd92c2000 - 0x149dd92c3fff 0x149dd92c4000 - 0x149dd92c9fff 0x149dd92ca000 - 0x149dd92ccfff 0x149dd92cf000 - 0x149dd92cffff 0x149dd92d0000 - 0x149dd92d0fff 0x149dd92d1000 - 0x149dd92d1fff 0x149dd92d2000 - 0x149dd92d2fff 0x149dd92d3000 - 0x149dd92d3fff 0x149dd92d4000 - 0x149dd92dafff 0x149dd92db000 - 0x149dd92ddfff 0x149dd92de000 - 0x149dd92defff 0x149dd92df000 - 0x149dd92fffff 0x149dd9300000 - 0x149dd9307fff 0x149dd9308000 - 0x149dd9308fff 0x149dd9309000 - 0x149dd9309fff 0x149dd930a000 - 0x149dd930afff 0x56081509e000 - 0x56081518efff 0x56081518f000 - 0x560815298fff 0x560815299000 - 0x5608152f8fff 0x5608152fa000 - 0x560815328fff 0x560815329000 - 0x560815359fff 0x56081535a000 - 0x56081535dfff 0x560816191000 - 0x5608161b1fff 0x7ffdccd3f000 - 0x7ffdccd5ffff 0x7ffdccddd000 - 0x7ffdccde0fff 0x7ffdccde1000 - 0x7ffdccde2fff