Основные конструкции языка. Ветвления. Циклы - 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
, которое является количеством указанных символов в тексте.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д