2015-04-27 2 views

ответ

2

Я вижу, что вы отметили функциональное программирование, но решение, которое вы пытаетесь сделать, далеки от функциональности.

Функциональный подход состоял бы в анализе случая. Базовый регистр будет пустым. Ответ будет равен 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) 
+0

я меченый функционал случайно. моя вина. – LcyHle

+0

@ LcyHle нормально. отредактирован в некоторых указателях цикла. – Sylwester

Смежные вопросы