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 9676KB
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
  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