Основные конструкции языка. Ветвления. Циклы - 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
Объяснение кода листинга программы
- В функции
task-1
текст разделяется на слова, образующие списокws
. - Каждое слово из списка
ws
обрабатывается с помощьюmapcar
. ФункцияstrLen
вычисляет длину слова, аcadr
возвращает пару из списка, состоящую из длины слова и самого слова. - Затем, список
wl
сортируется по первому элементу каждой пары с помощьюqsort-a
. - Результатом сортировки является новый список
ss
, состоящий из вторых элементов пар. - Итерация по списку
ss
с помощьюiter
позволяет сконкатенировать строкуr
с каждым элементом спискаss
, добавляя между ними пробел. - В функции
task-2
итерация по текстуtxt
происходит с помощьюiter
. - Если символ
a
является одним из значений, указанных в списке+
--
*/, счетчикc
увеличивается на 1. - В конце функции возвращается значение
c
, которое является количеством указанных символов в тексте.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д