Разбить слова по слогам - Lisp
Формулировка задачи:
Добрый день, есть такое задание.
Дана фраза русского языка. Написать программу, которая разбивает каждое слово фразы на слоги.
Нашла код:
Но почему то выдает ошибку:
Error: Argument to apply/funcall is not a function: (LAMBDA (S) (SLOGI S)).
1 (continue) Try calling a different function instead of (LAMBDA (S) (SLOGI S)) with the same arguments.
2 (abort) Return to level 0.
3 Return to top loop level 0.
Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.
(setq glasn '(а е ё и о у ы э ю я)) (defun is_glasn (chr lst_glasn) ((null lst_glasn) nil) ((equal chr (car lst_glasn)) T) (is_glasn chr (cdr lst_glasn)) ) (defun ins (s) ((is_glasn s glasn) (pack (list s '-))) s ) (defun divide_word (word) ((null word) nil) (cons (ins (car word)) (divide_word (cdr word))) ) (defun slogi (txt) (mapcar '(lambda (s) (pack (divide_word (unpack s)))) txt) ) (defun razdel (txt) (mapcar '(lambda (s) (slogi s)) txt) )
Решение задачи: «Разбить слова по слогам»
textual
Листинг программы
(defun task (txt) (let ((g "аеёиоуыэюя") (r "") (l 0)) (iter (for s in-string txt) (setq r (strCat r s)) (unless (zerop (strInd g s)) (setq r (strCat r "-")))) (setq r (strRep r "- " " ") l (strLen r)) (when (eq (strRight r 1) "-") (setq r (strLeft r (- l 1)))) r)) ==> TASK (task "мама мыла раму") ==> "ма-ма мы-ла ра-му" (task "маша ела кашу") ==> "ма-ша е-ла ка-шу"
Объяснение кода листинга программы
В этом коде:
- Создаётся функция
task
, которая принимает в качестве аргумента строкуtxt
. - В функции используется
let
для создания трёх переменных:g
,r
иl
. - Переменная
g
получает значениеаеёиоуыэюя
. - Переменная
r
получает значение пустой строки. - Переменная
l
получает значение 0. - Используется
iter
, чтобы пройти по каждому символу в строкеtxt
. - Для каждого символа добавляется его значение к переменной
r
. - Если текущий символ не является первым символом в переменной
g
, то к переменнойr
добавляется дефис. - После прохода по всем символам в
txt
, удаляются пробелы в начале и в конце переменнойr
. - Если последний символ в
r
является дефисом, то удаляются последний символ вr
и возвращаетсяr
. - Возвращается значение
r
. Примеры использования функции: - (task
мама мыла раму
) ->ма-ма мы-ла ра-му
- (task
маша ела кашу
) ->ма-ша е-ла ка-шу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д