1

私は次のものを持っています:

(let ((count 0))
  (loop for i from 1 to 3 do
        (loop for j from 1 to 3 do
              (loop for k from 1 to 3 do
                    (setq count (+ 1 count))))
        finally (return count)))

これを行うための最速の、しゃれた、構造はどれですか?

4

2 に答える 2

7

最適な方法は、コードの目的、つまり 3 つのループをネストする理由によって異なります。

あなたの特定のケースでは、最速かつ最短の答えは(* 3 3 3)または27

より一般的には、可能な改善は次のものに置き換えること(setq count (+ 1 count))です(incf count)

ループを次のように書くこともできます

(loop for i from 1 to 3 summing
   (loop for j from 1 to 3 summing
      (loop for k from 1 to 3 summing 1)))

ループしない回答を除いて、速度はすべてのバージョンでほぼ同じになるはずです。

于 2013-03-24T08:17:54.067 に答える
3

count最も内側のループで loop キーワードを使用sumし、外側のループで結果を使用できます。

(loop :for i :below 3
      :sum (loop :for j :below 3
                 :sum (loop :for k :below 3
                            :count t)))
于 2013-03-24T21:37:54.410 に答える