4

lisp 中的循环可能有点麻烦,cl-loop宏大大缓解了这一点。然而,我发现自己反复写一些骇人听闻的东西,比如

(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-loopfor 的顶层可见,否则将无法用于执行条件collectreturn语句。

4

2 回答 2

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-list使用 a 绑定为变量。withlet

于 2013-06-08T17:21:21.367 回答
1

我会写的

(dolist (item some-list)
  (let ((temp-var (some-function-of item)))
    ...))
于 2013-06-07T23:15:00.093 回答