2013-03-24 63 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)))