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

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

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

Код к задаче: «Изменить порядок букв в каждом слове файла на противоположный - 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)))

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


СОХРАНИТЬ ССЫЛКУ