Во всех словах предложения заменить суффикс "ing" на "ed" - Lisp
Формулировка задачи:
HomeLisp:
(defun task (sent)
(let* ((wlist (strWords sent))
(lw (length wlist))
(tmp (mapcar #'(lambda (w)
(let* ((l (strLen w))
(suff (strRight w 3))
(pref (if (> l 3) (strLeft w (- (strLen w) 3)) "")))
(if (eq suff "ing") (strCat pref "ed") w))) wlist))
(res ""))
(iter (for w in tmp) (setq res (strCat res " " w)))
(strltrim res)))
==> task
(task "speaking cooking and keeping")
==> "speaked cooked and keeped"Решение задачи: «Во всех словах предложения заменить суффикс "ing" на "ed"»
textual
Листинг программы
(defun replace-ie (s a b &aux (n (search a s))) (if n (replace-ie (replace s b :start1 n) a b) s)) (defun replace-inged (s) (replace-ie (replace-ie (replace-ie s "ing." "ed. ") "ing," "ed, ") "ing " "ed ")) > (replace-inged "inglewood laughing, and dancing.") "inglewood laughed, and danced. "
Объяснение кода листинга программы
В этом коде реализована функция замены суффикса ing на ed в предложении.
Список шагов, которые выполняются в коде:
- Определяется функция
replace-ie, которая принимает три аргумента:s(строка, в которой нужно выполнить замену),a(заменяемый суффикс) иb(заменяющий суффикс). - В функции
replace-ieиспользуется вспомогательная переменнаяn, которая инициализируется значениемnil. Она будет использоваться для отслеживания результатов поиска подстрокиaв строкеs. - Если
nнеnil, это означает, что подстрокаaбыла найдена в строкеs. В этом случае функцияreplace-ieвызывается рекурсивно для строкиs, замененной наb, начиная с позицииn+1. - Если
nравноnil, это означает, что подстрокаaне была найдена в строкеs. В этом случае исходная строкаsвозвращается без изменений. - Определяется функция
replace-inged, которая вызывает функциюreplace-ieдля замены суффиксаingнаedв предложении. - В функции
replace-ingedстрокаinglewood laughing, and dancing.передается в функциюreplace-ieв качестве аргумента. - Функция
replace-ieвызывается рекурсивно три раза: сначала для заменыingнаedв словеlaughing, затем для заменыingнаedв словеdancing, и, наконец, для заменыingнаedв словеsinglewood. - Результатом выполнения функции
replace-ingedявляется строкаinglewood laughed, and danced.