loop:リストを回しつつ、要素の数え上げもする

loop:リストを回しつつ、要素の数え上げもする

(defvar *names*
  '(nil "おそ松" "カラ松" "チョロ松" "一松" "十四松" "トド松" nil))


(loop :for n :in *names*
      :for c :from 1
      :collect (list c n))
;=>  ((1 NIL) (2 "おそ松") (3 "カラ松") (4 "チョロ松")
;     (5 "一松") (6 "十四松") (7 "トド松") (8 NIL))


;; nilは除外したい、というような場合
(loop :for n :in *names*
      :count n :into c
      :when n :collect (list c n))
;=>  ((1 "おそ松") (2 "カラ松") (3 "チョロ松") (4 "一松")
;     (5 "十四松") (6 "トド松"))