Изменить порядок букв в каждом слове файла на противоположный - Lisp
Формулировка задачи:
Помогите, пожалуйста, написать программку на лиспе для решения след задания:
"В данном текстовом файле изменить порядок букв в каждом слове на
противоположный".
например: "абв гд ежз" -> "вба дг зже"
Решение задачи: «Изменить порядок букв в каждом слове файла на противоположный»
textual
Листинг программы
(defun nfoo (string) (prog (word-start word-end (i 0)) find-word-start (when (>= i (length string)) (go end)) (when (alpha-char-p (aref string i)) (go set-word-start)) (incf i) (go find-word-start) set-word-start (setf word-start i) (go word-start-set) word-start-set (go find-word-end) find-word-end (when (or (= (1+ i) (length string)) (not (alpha-char-p (aref string (1+ i))))) (go set-word-end)) (incf i) (go find-word-end) set-word-end (setf word-end i) (go word-end-set) word-end-set (incf i 2) (go reverse-word) reverse-word (when (>= word-start word-end) (go word-reversed)) (rotatef (aref string word-start) (aref string word-end)) (incf word-start) (decf word-end) (go reverse-word) word-reversed (go find-word-start) end (return string))) (defun foo (string) (nfoo (copy-seq string)))
Объяснение кода листинга программы
В полном объёме данный код реализовать задачу не сможет, так как в нём не учтена смена порядка букв в каждом слове файла на противоположный. Однако, можно усмотреть некоторые попытки реализации этой задачи в функциях nfoo
и foo
. Рассмотрим их по порядку:
- Функция
nfoo
пытается найти все слова в строке и изменить их порядок на противоположный. Однако, в данном коде реализован только алгоритм поиска слов в строке, но не их перестановка. - Функция
foo
является оберткой функцииnfoo
, она вызываетnfoo
на копии строки. То есть, если в исходной строке было несколько слов, то после вызова функцииfoo
каждое слово будет изменено на обратное, но все слова будут идти в том же порядке, что и в исходной строке. Таким образом, данный код не является полным решением поставленной задачи.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д