繰り返しからの脱出


Tags: 制御構造, 【募集中】

loopの場合

通常の終了は loop-finish を使います。

(loop for i in '(1 2 3 4 5)
      do (print i)
         (loop-finish))

returnキーワードでも脱出できます。

(loop for i in '(1 2 3 4 5)
      do (print i)
      return i)

return による脱出は finally キーワードで指定されたフォームが実行されないので、脱出というより中断的な意味合いになると思います。(繰り返しの前処理・後処理)

無条件に脱出するのはあまり役に立たないので、普通は条件指定します。

(loop for i in '(1 2 3 4 5)
      if (evenp i)
      do (print i)
         (loop-finish))

ネストしたループから抜けるには namedとreturn-fromを組み合わせて使います

(loop named outer
      for i from 1 to 10 do
      (loop for j from 1 to 10
            if (= (+ i j) 10)
            do (return-from outer (cons i j))))