Hatena::Groupcadr

kozima の日記

2009-05-29

loop の気持ち悪い使い方

| 23:09

なんとなく思いつきで列挙してみた。

(loop for i from 1 to 10 finally (return i))
;=> 11

;; 確か処理系依存。昔どこかで話題になったような。
(loop for i from 1 to 10 collect (lambda (x) (+ x i)) into funs
    collect i into nums
    finally (return (mapcar #'funcall funs nums)))
;=> (12 13 14 15 16 17 18 19 20 21)

;; dotimes でも同じようなことはできますけど。
(loop for i from 1 to 10 collect (incf i))
;=> (2 4 6 8 10)

(loop for x on '(1 2 3 4 5 6 7 8) collect (pop x))
;=> (1 3 5 7)