Я вижу, что вы отметили функциональное программирование, но решение, которое вы пытаетесь сделать, далеки от функциональности.
Функциональный подход состоял бы в анализе случая. Базовый регистр будет пустым. Ответ будет равен 0. Случай по умолчанию будет длиной rest
списка плюс один. например. (my-length '(1)) ==> (1+ (my-length '()) ==> (1+ 0) ==> 1
Всё. Он работает для любого списка длины, так как (my-length '(1 2 3)) ==> (1+ (1+ (1+ 0))) ==> 3
EDIT
Где определяется count
? setq
обновляет существующее привязку. Возможно, вы должны использовать let
, чтобы сделать локальную привязку. Кроме того, в loop
вы можете сделать переменные:
(loop :for count :from 0
:for element :in listA
:finally (return count))
loop
фактически может рассчитывать, сумма и многое другое, так что это лучший способ:
(loop :for element :in listA
:counting t)
я меченый функционал случайно. моя вина. – LcyHle
@ LcyHle нормально. отредактирован в некоторых указателях цикла. – Sylwester