fork download
  1. (defun vowel-p (char)
  2. (member char '(#\а #\е #\ё #\и #\о #\у #\ы #\э #\ю #\я
  3. #\А #\Е #\Ё #\И #\О #\У #\Ы #\Э #\Ю #\Я)
  4. :test #'char=))
  5.  
  6. (defun split-word (word)
  7. (labels ((split-chars (chars current syllables)
  8. (if (null chars)
  9. (if current
  10. (if syllables
  11. (reverse (cons (concatenate 'string
  12. (car syllables)
  13. (coerce (reverse current) 'string))
  14. (cdr syllables)))
  15. (list (coerce (reverse current) 'string)))
  16. (reverse syllables))
  17. (let ((ch (car chars)))
  18. (if (vowel-p ch)
  19. (split-chars (cdr chars)
  20. nil
  21. (cons (coerce (reverse (cons ch current)) 'string)
  22. syllables))
  23. (split-chars (cdr chars)
  24. (cons ch current)
  25. syllables))))))
  26. (split-chars (coerce word 'list) nil nil)))
  27.  
  28. (defun split-string (str)
  29. (labels ((split-chars (i current words)
  30. (if (>= i (length str))
  31. (if current
  32. (reverse (cons (coerce (reverse current) 'string) words))
  33. (reverse words))
  34. (let ((ch (char str i)))
  35. (if (char= ch #\Space)
  36. (if current
  37. (split-chars (+ i 1)
  38. nil
  39. (cons (coerce (reverse current) 'string) words))
  40. (split-chars (+ i 1) nil words))
  41. (split-chars (+ i 1)
  42. (cons ch current)
  43. words))))))
  44. (split-chars 0 nil nil)))
  45.  
  46. (defun split-phrase (phrase)
  47. (mapcar #'split-word (split-string phrase)))
  48.  
  49. (print (split-phrase "функциональное программирование"))
  50. (print (split-phrase "написать программу"))
  51. (print (split-phrase "дана фраза на русском языке"))
  52. (print (split-phrase " эвакуатор импровизация" ))
  53. (print (split-phrase "коллекция чай" ))
  54. (print (split-phrase "строка слово текст"))
Success #stdin #stdout #stderr 0.02s 9660KB
stdin
Standard input is empty
stdout
(("фу" "нкци" "о" "на" "льно" "е") ("про" "гра" "мми" "ро" "ва" "ни" "е")) 
(("на" "пи" "сать") ("про" "гра" "мму")) 
(("да" "на") ("фра" "за") ("на") ("ру" "сском") ("я" "зы" "ке")) 
(("э" "ва" "ку" "а" "тор") ("и" "мпро" "ви" "за" "ци" "я")) 
(("ко" "лле" "кци" "я") ("чай")) 
(("стро" "ка") ("сло" "во") ("текст")) 
stderr
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