Emacs:cl-loop和重复计算的值

时间:2013-06-07 19:19:07

标签: loops elisp emacs24

在lisp中循环可能有点麻烦,cl-loop宏大大减轻了这一点。但是,我发现自己一再写出像

这样的hackish
(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的顶层显示,否则它将无法用于执行条件collectreturn语句。

2 个答案:

答案 0 :(得分:3)

为什么要包含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-listwithlet绑定为变量。

答案 1 :(得分:1)

我写了

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