Основные конструкции языка. Ветвления. Циклы - Lisp

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

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

2. Слова в предложении разделены пробелами. Упорядочить слова в соответствии с ростом их длины. 3. Определить в заданной строке количество знаков арифметических действий (+, -, и т.д.).

Решение задачи: «Основные конструкции языка. Ветвления. Циклы»

textual
Листинг программы
(defun task-1 (txt)
 (let* ((ws (strWords txt))
        (wl (mapcar (lambda (w) (list (strLen w) w)) ws))
        (ss (mapcar 'cadr (qsort-a wl 'car)))
        (r ""))
   (iter (for w in ss) (setq r (strCat r w " "))) r))
 
==> TASK-1
 
(task-1 "a abc ab")
 
==> "a ab abc "
 
(defun task-2 (txt)
 (let ((c 0))
   (iter (for a in-string txt)
     (when (member a '("+" "-" "*" "/")) (counting 1 into c))) c)) 
 
==> TASK-2
 
(task-2 "a+ b- c* d/")
 
==> 4

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

  1. В функции task-1 текст разделяется на слова, образующие список ws.
  2. Каждое слово из списка ws обрабатывается с помощью mapcar. Функция strLen вычисляет длину слова, а cadr возвращает пару из списка, состоящую из длины слова и самого слова.
  3. Затем, список wl сортируется по первому элементу каждой пары с помощью qsort-a.
  4. Результатом сортировки является новый список ss, состоящий из вторых элементов пар.
  5. Итерация по списку ss с помощью iter позволяет сконкатенировать строку r с каждым элементом списка ss, добавляя между ними пробел.
  6. В функции task-2 итерация по тексту txt происходит с помощью iter.
  7. Если символ a является одним из значений, указанных в списке +--*/, счетчик c увеличивается на 1.
  8. В конце функции возвращается значение c, которое является количеством указанных символов в тексте.

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


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

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

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