В заданной строке определить самое короткое слово и напечатать его - Lisp

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

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

В заданной строке определить самое короткое слово и напечатать его.

Решение задачи: «В заданной строке определить самое короткое слово и напечатать его»

textual
Листинг программы
(defun split (str)
  (let ((str (strltrim str)))
    (unless (eq str "")
       (let ((lenword (strInd str " ")))
         (if (< 0 lenword)
             (cons (strMid str 1 (1- lenword))
                   (split (strMid str lenword)))
             (list (strMid str 1 (strlen str))))))))
 
(defun task (words)
  (let* ((word (car words))
         (len (strlen word))
         (tmp nil))
    (dolist (item (cdr words) word)
      (when (< (setq tmp (strlen item)) len)
        (setq word item
              len tmp)))))
 
(task (split "Отфильтровать базар и ответить за него."))
 
==> "и"

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

В коде две функции: split и task. Функция split принимает строку и возвращает список слов в этой строке. Алгоритм работы следующий:

  1. Удаление пробелов в начале и в конце строки с помощью strltrim.
  2. Проверка, пустая ли строка. Если нет, то переходим к следующему шагу, иначе возвращаем пустой список.
  3. Разделение строки на слова с помощью strInd, ищущего первое вхождение пробела. Если пробел не найден, то это означает, что строка состоит из одного слова, и мы добавляем это слово в список. Если пробел найден, то мы получаем подстроку до первого пробела и добавляем её в список, а затем рекурсивно вызываем split для оставшейся части строки после пробела. Функция task принимает список слов и находит самое короткое слово. Алгоритм работы следующий:
  4. Получение первого слова из списка и сохранение его в переменной word.
  5. Вычисление длины слова с помощью strlen.
  6. Инициализация переменной len значением длины слова.
  7. Обход списка слов с помощью dolist.
  8. Для каждого слова в списке:
    • Если длина текущего слова меньше длины предыдущего самого короткого слова, то обновляем значение word и len.
    • Если длина текущего слова равна длине предыдущего самого короткого слова, то обновляем только значение word.
  9. Возвращение самого короткого слова. В результате выполнения кода будет выведено самое короткое слово из строки Отфильтровать базар и ответить за него.и.

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


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

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

8   голосов , оценка 4.5 из 5
Похожие ответы