Loops Emacs:cl循环和重复计算的值

Loops Emacs:cl循环和重复计算的值,loops,elisp,emacs24,Loops,Elisp,Emacs24,lisp中的循环可能有点麻烦,而cl循环宏大大减轻了这种麻烦。然而,我发现自己不断地写一些像 (cl-loop for item in some-list with temp-var do (setf temp-var (some-function-of item)) ...) (cl-loop for item in some-list for x = (some-function-of item) then (some-function-of item)

lisp中的循环可能有点麻烦,而
cl循环
宏大大减轻了这种麻烦。然而,我发现自己不断地写一些像

(cl-loop for item in some-list 
     with temp-var do (setf temp-var (some-function-of item))
     ...)

(cl-loop for item in some-list
     for x = (some-function-of item) then (some-function-of item)
     ...)
是否有更优雅的方法以同样的方式计算每次迭代的值?请注意,它必须在
cl loop
的顶层可见,否则它将无法用于执行条件
collect
return
语句

我会写的

(dolist (item some-list)
  (let ((temp-var (some-function-of item)))
    ...))

为什么要包含
then
子句?我很肯定

(cl-loop for item in some-list
         for x = (some-function-of item)
         ...)
应该这样做

或者,您可以在循环初始化时预先计算所有新值:

(loop for item     in some-list
      for mod-item in (mapcar 'some-function-of some-list)
      ...)

您可能希望将
some list
绑定为变量,如果它是一个复杂的表达式,则使用带
let

。。。但失去了cl循环的各种价值收集形式;实际上,我会将其包装成类似于
(let(out list)(BLA…(push value out list)…)(reverse out list))
。我担心这对我来说不是一个真正的进步。谢谢你的建议。嗯,看来我一定是做错了什么事,然后我以前试着删掉了then条款。再试一次,是的,它的行为正如你所说。当我上次尝试时,由于某种原因,它没有。可能是测试代码中的错误(不管是什么)。