В заданной строке определить самое короткое слово и напечатать его - 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
принимает строку и возвращает список слов в этой строке.
Алгоритм работы следующий:
- Удаление пробелов в начале и в конце строки с помощью
strltrim
. - Проверка, пустая ли строка. Если нет, то переходим к следующему шагу, иначе возвращаем пустой список.
- Разделение строки на слова с помощью
strInd
, ищущего первое вхождение пробела. Если пробел не найден, то это означает, что строка состоит из одного слова, и мы добавляем это слово в список. Если пробел найден, то мы получаем подстроку до первого пробела и добавляем её в список, а затем рекурсивно вызываемsplit
для оставшейся части строки после пробела. Функцияtask
принимает список слов и находит самое короткое слово. Алгоритм работы следующий: - Получение первого слова из списка и сохранение его в переменной
word
. - Вычисление длины слова с помощью
strlen
. - Инициализация переменной
len
значением длины слова. - Обход списка слов с помощью
dolist
. - Для каждого слова в списке:
- Если длина текущего слова меньше длины предыдущего самого короткого слова, то обновляем значение
word
иlen
. - Если длина текущего слова равна длине предыдущего самого короткого слова, то обновляем только значение
word
.
- Если длина текущего слова меньше длины предыдущего самого короткого слова, то обновляем значение
- Возвращение самого короткого слова.
В результате выполнения кода будет выведено самое короткое слово из строки
Отфильтровать базар и ответить за него.
—и
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д