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)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 回答