繰り返し(do) - lisp-cookbook-ja/common-lisp GitHub Wiki

制御構造

繰り返し(do)

繰り返し毎に変化する変数を複数使うことができます。

(do ((変数1 初期値1 更新方法1)
     (変数2 初期値2 更新方法2)
     ・・・
     (変数n 初期値n 更新方法n))
    (終了条件 [戻り値])
  式 ・・・  )

初期値1000で10%増加する a に

初期値 300で30%増加する b が勝つのは何ターン後?

 (do ((a 1000 (* a 1.1))
      (b  300 (* b 1.3))
      (y    0 (1+ y)))
     ((> b a) y))
;=> 8

というように、式を書かないで済ますことも多い。