6

Peter Seibel のPractical Common Lispで、彼は次の例を挙げています。

(do ((nums nil) (i 1 (1+ i)))
    ((> i 10) (nreverse nums))
  (push i nums))

ループ内で nums を使用しているが、ステップ形式を与えていないため、どのように機能するかを確認できます。これを行うのではなく、変数定義に数値を入れる理由は次のとおりです。

(let (nums) (do ((i 1 (+ i 1)))
         ((> i 10) (nreverse nums))
       (push i nums)))

ちゃんとした理由があると確信していますが、まだわかりません。

4

1 に答える 1

12

便利でインデントを節約できるからです。さらに、アキュムレータは概念的にループに属しているので、そこに入れてみませんか?

于 2008-10-29T20:56:21.707 に答える