我有以下内容:
(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)
或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)))