Функция: найти количество троек подряд идущих одинаковых элементов списка - Lisp
Формулировка задачи:
написать функцию, вычисляющую количество троек подряд идущих элементов числового списка, в каждой из которых все элементы одинаковы.
Например (1 1 3 3 3 3 4 3 4 4 4 2 1 1 1) -> 4.
Решение задачи: «Функция: найти количество троек подряд идущих одинаковых элементов списка»
textual
Листинг программы
(defun count-triples (w) (loop for a in w for b in (cdr w) for c in (cddr w) when (= a b c) count a)) > (count-triples '(1 1 3 3 3 3 4 3 4 4 4 2 1 1 1)) 4
Объяснение кода листинга программы
В данном коде определена функция count-triples, которая принимает один аргумент w. Этот аргумент является списком. Внутри функции используется цикл loop, который выполняет три вложенных цикла for. Первый цикл выполняется для каждого элемента a в списке w. Второй цикл выполняется для каждого элемента b, который следует за a в списке w. Третий цикл выполняется для каждого элемента c, который следует за b в списке w.
Операция = сравнивает значения a, b и c. Если они равны, то переменная a увеличивается на единицу.
В конце функции результат выводится на экран.
Ответ:
- В данном коде определена функция
count-triples, которая принимает аргументw. - Функция использует цикл
loopс тремя вложенными цикламиfor. - Первый цикл выполняется для каждого элемента
aв спискеw. - Второй цикл выполняется для каждого элемента
b, который следует заaв спискеw. - Третий цикл выполняется для каждого элемента
c, который следует заbв спискеw. - Операция
=сравнивает значенияa,bиc. - Если они равны, то переменная
aувеличивается на единицу. - В конце функции результат выводится на экран.