在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-loop
的顶层显示,否则它将无法用于执行条件collect
或return
语句。
答案 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-list
或with
将let
绑定为变量。
答案 1 :(得分:1)
我写了
(dolist (item some-list)
(let ((temp-var (some-function-of item)))
...))