2013-03-10 2 views
2

J'ai un problème. Je dois obtenir la longueur moyenne de cette liste: (1 (2 3 4) 5 (6 7) 8 (9)). Il devrait être 2. Et je n'ai aucune idée par où commencer ...LISP - Comment obtenir la longueur moyenne d'une liste imbriquée?

J'ai essayé d'obtenir (1 2 3 4 5 6 7 8 9) de (1 (2 3 4) 5 (6 7) 8 (9)) mais j'ai échoué, parce que (reduce #'append list-name) ne fonctionne pas.

Je idée comment calculer cela, mais je dois obtenir toutes les listes à l'intérieur (1 (2 3 4) 5 (6 7) 8 (9)) comme ceci:

list1 = (1 5 8) 
list2 = (2 3 4) 
list3 = (6 7) 
list4 = (9) 

mais je ne Je ne sais pas comment.

Pouvez-vous me donner de l'aide?

+1

pourquoi '(1 5 8)' du tout? '1' n'est pas une liste, donc il n'a pas de longueur. De même, '5' et' 8'. Il vous reste '(2 3 4)', '(6 7)' et '(9)', avec une liste moyenne de 2 exactement. –

+0

Merci, je dois donc obtenir (2 3 4), (6 7) et (8) seulement. Mais comment? – Klemenko

+0

'(listp 1)' => 'NIL'. –

Répondre

1
(defun nested-lists-average-length (ls &aux (i 0) (n 0)) 
    (dolist (a ls (float (/ _______))) 
     (if (_______ a) 
     (progn (_______ i) 
       (incf n (_______ a)))))) 

Fill ... in ... the ... blanks. :)

+0

FAIT! Merci beaucoup :) – Klemenko

Questions connexes