2013-03-24 24 views
0

我有以下幾點:如何積累嵌套for循環中的計數?

(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))) 

這是最快,lispish,構建做到這一點?

+0

請格式化和編輯您的問題,並縮進代碼(通過啓動代碼行有4個空格)。否則,你的方式可能足夠好。 – 2013-03-24 07:34:28

回答

7

這樣做的最好方法取決於代碼的目的,即爲什麼要嵌套三個循環。

在特定情況下,最快,最簡單的回答是(* 3 3 3)27

更一般地,一個可能的改進是(incf count)

更換(setq count (+ 1 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))) 

除了非循環的答案,所有版本的速度應該大致相同。

2

可以使用count循環關鍵字最內層循環和sum結果外循環:

(loop :for i :below 3 
     :sum (loop :for j :below 3 
       :sum (loop :for k :below 3 
          :count t)))