2020年1月22日水曜日

loopマクロ

 たとえば、あるlistの中から奇数だけを抽出したい、というとき。

wrk
(1 2 3 4 5 6 7 8 9 10)
(loop for x in wrk
      collect
      (when (oddp x)
        x))
(1 nil 3 nil 5 nil 7 nil 9 nil)

 こうやると、nilがまじってしまう。このケースだと、remove-ifを使えば、いいのだけの話なのだけど——loopマクロでこんな風にしていた。

(loop for x in wrk
      append
      (when (oddp x)
        (list x)))
(1 3 5 7 9)

 なんかいまいちだなぁ。
 なんとこうできるのだった。

(loop for x in wrk
      when (oddp x)
        collect x)
(1 3 5 7 9)

 すげえな、loopマクロ。