Сложить по 3 все элементы числового списка на языке LISP
Формулировка задачи:
Как на языке LISP сделать реккурсивную функцию для работы со списками:
Сложить по 3 все элементы числового списка и вернуть новый список?
Решение задачи: «Сложить по 3 все элементы числового списка на языке LISP»
textual
Листинг программы
(define (f data)
(match data
((cons x (cons xx (cons xxx xs)))
(cons (list x xx xxx) (f xs)))
('() data)
(_ (list data))))
(f '(1 2 3 4 5 6 7 8 9 0))
;'((1 2 3) (4 5 6) (7 8 9) (0))
Объяснение кода листинга программы
В этом коде определён рекурсивный функционал для сложения чисел в списке.
(define (f data) ...)— определяет функцию с именемf, которая принимает один аргументdata.(match data ...)— это оператор сопоставления шаблонов, который рекурсивно просматривает списокdataи применяет функциюfк каждому соответствию.((cons x (cons xx (cons xxx xs))) ...)— это шаблон, который соответствует элементам списка, содержащим три элемента:x,xxиxxx, с последующим спискомxs. В этом случае функцияfприменяется к спискуxs.('() data) ...)— это шаблон, который соответствует пустому списку. В этом случае функцияfприменяется к пустому списку.(_ (list data)) ...)— это шаблон, который соответствует любому списку, который не соответствует предыдущим шаблонам. В этом случае функцияfприменяется к спискуdata.(f '(1 2 3 4 5 6 7 8 9 0)) ...)— это вызов функцииfс аргументом(1 2 3 4 5 6 7 8 9 0)....)— это оператор, который завершает определение функции. В результате выполнения кода функцияfбудет вызвана с аргументом(1 2 3 4 5 6 7 8 9 0), и она будет рекурсивно применяться к каждому списку, содержащему три элемента, пока не будет достигнут конец списка. В каждом случае она будет складывать три элемента в список и затем вызывать себя с уменьшенным списком. После обработки всех списков функция вернёт окончательный результат, который будет выведен в консоль.