第一个问题:同时遍历 list 的索引和值可以使用 cl-loop (参见 (info “(cl) Loop Facility”))
(cl-loop for i from 0
for x in '(a b c)
collect (cons i x))
后面几个问题:一般来说,写 Emacs Lisp 会倾向于函数式风格,用到 break continue return 的几率大大小于在 C, JS 等语言。(注意 cl-loop
本身可以求出一个值,与 for
语句不同。)
如果用到了,可以使用 cl-loop 的 return
(退出循环而非函数), if
/when
等语句,见 (info “(cl) Other Clauses”)。
break 和 return 也可以用 non-local exit :catch
和 throw
。
continue 似乎没有比较直接的对应,不过这个问题也不是很大。重申一遍,用函数式风格写代码,对这种控制流的要求会低很多。