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.  
  50. (print (split-phrase "функциональное программирование"))
  51.  
  52. (print (split-phrase "написать программу"))
  53.  
  54. (print (split-phrase "дана фраза на русском языке"))
  55.  
  56. (print (split-phrase " эвакуатор импровизация" ))
  57.  
  58. (print (split-phrase "коллекция чай" ))
  59.  
  60. (print (split-phrase "строка слово текст"))
  61.  
  62.  
Success #stdin #stdout #stderr 0.02s 9548KB
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
  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