Loops Emacs:cl循环和重复计算的值
lisp中的循环可能有点麻烦,而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)
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条款。再试一次,是的,它的行为正如你所说。当我上次尝试时,由于某种原因,它没有。可能是测试代码中的错误(不管是什么)。