私は次のものを持っています:
(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)))
これを行うための最速の、しゃれた、構造はどれですか?
私は次のものを持っています:
(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)))
これを行うための最速の、しゃれた、構造はどれですか?
最適な方法は、コードの目的、つまり 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)))
ループしない回答を除いて、速度はすべてのバージョンでほぼ同じになるはずです。
count
最も内側のループで loop キーワードを使用sum
し、外側のループで結果を使用できます。
(loop :for i :below 3
:sum (loop :for j :below 3
:sum (loop :for k :below 3
:count t)))