Основные конструкции языка. Ветвления. Циклы - 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, которое является количеством указанных символов в тексте.