Изменить порядок букв в каждом слове файла на противоположный - Lisp

Узнай цену своей работы

Формулировка задачи:

Помогите, пожалуйста, написать программку на лиспе для решения след задания: "В данном текстовом файле изменить порядок букв в каждом слове на противоположный". например: "абв гд ежз" -> "вба дг зже"

Решение задачи: «Изменить порядок букв в каждом слове файла на противоположный»

textual
Листинг программы
  1. (defun nfoo (string)
  2.   (prog (word-start word-end (i 0))
  3.     find-word-start
  4.       (when (>= i (length string)) (go end))
  5.       (when (alpha-char-p (aref string i))
  6.         (go set-word-start))
  7.       (incf i)
  8.       (go find-word-start)
  9.     set-word-start
  10.       (setf word-start i)
  11.       (go word-start-set)
  12.     word-start-set
  13.       (go find-word-end)
  14.     find-word-end
  15.       (when (or (= (1+ i) (length string))
  16.                 (not (alpha-char-p (aref string (1+ i)))))
  17.         (go set-word-end))
  18.       (incf i)
  19.       (go find-word-end)
  20.     set-word-end
  21.       (setf word-end i)
  22.       (go word-end-set)
  23.     word-end-set
  24.       (incf i 2)
  25.       (go reverse-word)
  26.     reverse-word
  27.       (when (>= word-start word-end) (go word-reversed))
  28.       (rotatef (aref string word-start) (aref string word-end))
  29.       (incf word-start)
  30.       (decf word-end)
  31.       (go reverse-word)
  32.     word-reversed
  33.       (go find-word-start)
  34.     end
  35.       (return string)))
  36.  
  37. (defun foo (string)
  38.   (nfoo (copy-seq string)))

Объяснение кода листинга программы

В полном объёме данный код реализовать задачу не сможет, так как в нём не учтена смена порядка букв в каждом слове файла на противоположный. Однако, можно усмотреть некоторые попытки реализации этой задачи в функциях nfoo и foo. Рассмотрим их по порядку:

  1. Функция nfoo пытается найти все слова в строке и изменить их порядок на противоположный. Однако, в данном коде реализован только алгоритм поиска слов в строке, но не их перестановка.
  2. Функция foo является оберткой функции nfoo, она вызывает nfoo на копии строки. То есть, если в исходной строке было несколько слов, то после вызова функции foo каждое слово будет изменено на обратное, но все слова будут идти в том же порядке, что и в исходной строке. Таким образом, данный код не является полным решением поставленной задачи.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы